From 9812b662a44fe50bb2f8700002c78a7d59904b28 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Mon, 12 Jan 2026 13:20:46 -0500 Subject: [PATCH 01/86] 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/86] 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/86] 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/86] 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/86] 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/86] 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/86] 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/86] 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/86] 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/86] 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/86] 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/86] 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/86] 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/86] 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/86] 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/86] 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/86] 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/86] 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/86] 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/86] 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/86] 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/86] 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/86] 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/86] 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/86] 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/86] 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/86] 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/86] 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/86] 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/86] 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/86] 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/86] 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/86] 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/86] 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/86] 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/86] 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/86] 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/86] 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/86] 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/86] 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/86] 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/86] 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/86] 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/86] ; --- .../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/86] 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/86] 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/86] 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/86] 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/86] add base 64 test --- .../TraditionalBase64UrlEncoderTest.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoderTest.java index 52a02e9c..a4fb89dc 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoderTest.java @@ -25,5 +25,23 @@ public void testDecode2() { public void testDecode3() { Assertions.assertEquals("000011000001000000000001100011110000000000000000", base64UrlEncoder.decode("DBABjwAA").toString()); } + + @Test + public void testDifferingLengthDecodes() { + for (int length = 0; length < 1000; length++) { + StringBuilder in = new StringBuilder(); + StringBuilder out = new StringBuilder(); + for (int i = 0; i < length; i++) { + if (i % 2 == 0) { + in.append('u'); + out.append("101110"); + } else { + in.append('d'); + out.append("011101"); + } + } + Assertions.assertEquals(out.toString(), base64UrlEncoder.decode(in.toString()).toString()); + } + } } From e09b30ebc5c40f2047caee34012abb1e92fd28d8 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Wed, 28 Jan 2026 21:42:27 -0500 Subject: [PATCH 50/86] clean up maven configuration --- iabgpp-encoder/pom.xml | 13 ++++++++----- iabgpp-extras-jackson/pom.xml | 13 ++++++++----- iabgpp-extras/pom.xml | 13 ++++++++----- pom.xml | 36 +++++++++++++++++++++++++++-------- 4 files changed, 52 insertions(+), 23 deletions(-) diff --git a/iabgpp-encoder/pom.xml b/iabgpp-encoder/pom.xml index 07caf281..0592e79a 100644 --- a/iabgpp-encoder/pom.xml +++ b/iabgpp-encoder/pom.xml @@ -26,7 +26,14 @@ maven-surefire-plugin - 2.22.2 + + + org.apache.maven.plugins + maven-javadoc-plugin + + + com.diffplug.spotless + spotless-maven-plugin @@ -40,10 +47,6 @@ org.apache.maven.plugins maven-source-plugin - - org.apache.maven.plugins - maven-javadoc-plugin - org.apache.maven.plugins maven-gpg-plugin diff --git a/iabgpp-extras-jackson/pom.xml b/iabgpp-extras-jackson/pom.xml index b62612ba..ac1a1a3f 100644 --- a/iabgpp-extras-jackson/pom.xml +++ b/iabgpp-extras-jackson/pom.xml @@ -45,7 +45,14 @@ maven-surefire-plugin - 2.22.2 + + + org.apache.maven.plugins + maven-javadoc-plugin + + + com.diffplug.spotless + spotless-maven-plugin @@ -59,10 +66,6 @@ org.apache.maven.plugins maven-source-plugin - - org.apache.maven.plugins - maven-javadoc-plugin - org.apache.maven.plugins maven-gpg-plugin diff --git a/iabgpp-extras/pom.xml b/iabgpp-extras/pom.xml index b14f682e..6673191a 100644 --- a/iabgpp-extras/pom.xml +++ b/iabgpp-extras/pom.xml @@ -17,7 +17,14 @@ maven-surefire-plugin - 2.22.2 + + + org.apache.maven.plugins + maven-javadoc-plugin + + + com.diffplug.spotless + spotless-maven-plugin @@ -31,10 +38,6 @@ org.apache.maven.plugins maven-source-plugin - - org.apache.maven.plugins - maven-javadoc-plugin - org.apache.maven.plugins maven-gpg-plugin diff --git a/pom.xml b/pom.xml index b79ba53c..7c1921bb 100644 --- a/pom.xml +++ b/pom.xml @@ -62,6 +62,31 @@ + + maven-surefire-plugin + 2.22.2 + + + com.diffplug.spotless + spotless-maven-plugin + 3.2.1 + + + + 1.33.0 + + + + + + + + check + + verify + + + org.apache.maven.plugins maven-source-plugin @@ -80,6 +105,9 @@ org.apache.maven.plugins maven-javadoc-plugin 3.3.1 + + public + attach-javadoc @@ -113,14 +141,6 @@ release - - org.apache.maven.plugins - maven-source-plugin - - - org.apache.maven.plugins - maven-javadoc-plugin - org.apache.maven.plugins maven-gpg-plugin From 7e1a12f5502183e6fb7d597b9c313132df3ec1d2 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Mon, 2 Feb 2026 18:55:33 -0500 Subject: [PATCH 51/86] use bit set for fixed list --- .../com/iab/gpp/encoder/bitstring/BitSet.java | 21 +++++-- .../iab/gpp/encoder/bitstring/BitString.java | 5 ++ .../encoder/bitstring/BitStringReader.java | 8 +++ .../datatype/EncodableFixedIntegerList.java | 2 +- .../encoder/datatype/FixedIntegerList.java | 58 +++++++++++++------ .../encoder/datatype/encoder/IntegerSet.java | 16 ++--- .../datatype/FixedIntegerListTest.java | 2 +- .../encoder/FixedIntegerListEncoderTest.java | 2 +- 8 files changed, 78 insertions(+), 36 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java index cdc65ccd..3baab5e1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java @@ -1,14 +1,12 @@ package com.iab.gpp.encoder.bitstring; import java.util.Arrays; -import java.util.Base64; -import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; -import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; // a thin version of java.util.BitSet public final class BitSet { + private static final byte[] EMPTY = new byte[0]; private static final int ADDRESS_BITS_PER_WORD = 3; public static final int BITS_PER_WORD = 1 << ADDRESS_BITS_PER_WORD; @@ -26,7 +24,7 @@ public BitSet(int initialCapacity) { } public BitSet() { - this(new byte[0]); + this(EMPTY); } public static int wordIndex(int index) { @@ -104,4 +102,19 @@ public void set(int bitIndex) { int bit = bitIndex % BITS_PER_WORD; words[wordIndex] |= (1 << bit); } + + public boolean set(int bitIndex, boolean value) { + int wordIndex = wordIndex(bitIndex); + byte[] words = ensureIndex(wordIndex); + int bit = bitIndex % BITS_PER_WORD; + boolean prior = ((words[wordIndex] >>> bit) & 1) == 1; + if (prior != value) { + if (value) { + words[wordIndex] |= (1 << bit); + } else { + words[wordIndex] &= ~(1 << bit); + } + } + return prior; + } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java index f5cbe555..499b779b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java @@ -1,5 +1,6 @@ package com.iab.gpp.encoder.bitstring; +import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; @@ -37,6 +38,10 @@ public IntegerSet toIntegerSet(int from, int to) { return new IntegerSet(bitSet, from, to, 1); } + public FixedIntegerList toFixedIntegerList(int from, int elementSize, int size) { + return new FixedIntegerList(bitSet, from, elementSize, size); + } + @Override public String toString() { StringBuilder sb = new StringBuilder(length()); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringReader.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringReader.java index 634941ed..5a1f92ce 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringReader.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringReader.java @@ -1,5 +1,6 @@ package com.iab.gpp.encoder.bitstring; +import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.datatype.encoder.FibonacciIntegerEncoder; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; import com.iab.gpp.encoder.datatype.encoder.FixedLongEncoder; @@ -59,4 +60,11 @@ public IntegerSet readIntegerSet(int length) { return out; } + public FixedIntegerList readFixedIntegerList(int elementLength, int length) { + int newOffset = offset + elementLength * length; + FixedIntegerList out = bitString.toFixedIntegerList(offset, elementLength, length); + offset = newOffset; + return out; + } + } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java index 9f8947ac..5f7681d6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java @@ -17,7 +17,7 @@ public EncodableFixedIntegerList(int elementBitStringLength, int numElements) { super(true); this.elementBitStringLength = elementBitStringLength; this.numElements = numElements; - super.setValue(new FixedIntegerList(numElements), false); + super.setValue(new FixedIntegerList(elementBitStringLength, numElements), false); } public void encode(BitStringBuilder builder) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java index 9e6176e4..ec917964 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java @@ -1,7 +1,7 @@ package com.iab.gpp.encoder.datatype; import java.util.AbstractList; -import java.util.Arrays; +import com.iab.gpp.encoder.bitstring.BitSet; import com.iab.gpp.encoder.datatype.encoder.Dirtyable; /** @@ -11,15 +11,25 @@ public final class FixedIntegerList extends AbstractList implements Dirtyable { private boolean dirty; - private final byte[] array; + private final BitSet bitSet; + private final int offset; + private final int elementBitStringLength; + private final int numElements; - public FixedIntegerList(int size) { - this.array = new byte[size]; + public FixedIntegerList(BitSet bitSet, int offset, int elementBitStringLength, int numElements) { + this.bitSet = bitSet; + this.offset = offset; + this.elementBitStringLength = elementBitStringLength; + this.numElements = numElements; + } + + public FixedIntegerList(int elementBitStringLength, int numElements) { + this(new BitSet(elementBitStringLength * numElements), 0, elementBitStringLength, numElements); } @Override public int size() { - return array.length; + return numElements; } @Override @@ -28,7 +38,18 @@ public Integer get(int index) { } public int getInt(int index) { - return array[index]; + int length = elementBitStringLength; + int mask = 1 << length; + int from = offset + index * length; + int to = from + length; + int value = 0; + for (int i = from; i < to; i++) { + mask >>= 1; + if (bitSet.get(i)) { + value |= mask; + } + } + return value; } @Override @@ -37,19 +58,22 @@ public Integer set(int index, Integer value) { } public int setInt(int index, int value) { - // NOTE: int 128 is prevented since it would get turned into byte -128 - if(value < 0 || value >= 128) { - throw new IllegalArgumentException("FixedIntegerList only supports positive integers less than 128."); + int length = elementBitStringLength; + int mask = 1 << length; + if (value < 0 || value >= mask) { + throw new IllegalArgumentException( + "Numeric value '" + value + "' is too large for a bit string length of '" + elementBitStringLength + "'"); + } + int from = offset + index * length; + int to = from + length; + for (int i = from; i < to; i++) { + mask >>= 1; + if (bitSet.set(i, (value & mask) > 0)) { + value |= mask; + } } - int prior = array[index]; - array[index] = (byte) value; dirty = true; - return prior; - } - - @Override - public String toString() { - return Arrays.toString(array); + return value; } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java index 04757d67..9e880e60 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java @@ -142,13 +142,9 @@ public boolean addInt(int value) { logOutOfRange(value); return false; } - boolean present = bitSet.get(offset); - if (present) { - return false; - } - bitSet.set(offset); + boolean present = !bitSet.set(offset, true); dirty = true; - return true; + return present; } public boolean removeInt(int value) { @@ -157,13 +153,9 @@ public boolean removeInt(int value) { logOutOfRange(value); return false; } - boolean present = bitSet.get(offset); - if (!present) { - return false; - } - bitSet.clear(offset); + boolean present = bitSet.set(offset, false); dirty = true; - return true; + return present; } @Override diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListTest.java index 6aee9b3e..69b27b10 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListTest.java @@ -8,7 +8,7 @@ class FixedIntegerListTest { @Test void test() { - FixedIntegerList list = new FixedIntegerList(5); + FixedIntegerList list = new FixedIntegerList(6, 5); assertFalse(list.isDirty()); list.set(0, 2); list.set(1, 1); diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoderTest.java index 2144dbe5..f2868afe 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoderTest.java @@ -152,7 +152,7 @@ public void testEncode19() { } private FixedIntegerList decode(String str) { - FixedIntegerList out = new FixedIntegerList(2); + FixedIntegerList out = new FixedIntegerList(2, 2); FixedIntegerListEncoder.decode(out, new BitStringReader(BitString.of(str)), 2); return out; } From dcd562febf5a85dc4bd8dc3a1f6c928a929ba7e2 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Mon, 2 Feb 2026 20:00:21 -0500 Subject: [PATCH 52/86] lazy init of collections when decode does slices --- .../AbstractDirtyableBitStringDataType.java | 6 ++++-- .../AbstractEncodableBitStringDataType.java | 7 +++++++ .../EncodableFibonacciIntegerRange.java | 15 +++++++++----- .../datatype/EncodableFixedBitfield.java | 15 +++++++++----- .../datatype/EncodableFixedIntegerList.java | 20 ++++++++++++------- .../datatype/EncodableFixedIntegerRange.java | 15 +++++++++----- .../datatype/EncodableFlexibleBitfield.java | 15 +++++++++----- .../EncodableOptimizedFixedRange.java | 15 +++++++++----- 8 files changed, 74 insertions(+), 34 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java index cf2abaa6..6c6adcb4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java @@ -13,12 +13,14 @@ protected AbstractDirtyableBitStringDataType(boolean hardFailIfMissing) { @Override public boolean isDirty() { - return super.isDirty() || value.isDirty(); + return super.isDirty() || (value != null && value.isDirty()); } @Override public void setDirty(boolean dirty) { super.setDirty(dirty); - value.setDirty(dirty); + if (value != null) { + value.setDirty(dirty); + } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java index fe7f9842..cb0945b1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java @@ -27,9 +27,16 @@ public final boolean hasValue() { } public final T getValue() { + if (this.value == null) { + this.value = getDefaultValue(); + } return this.value; } + protected T getDefaultValue() { + return null; + } + public void setValue(Object value) { setValue(value, true); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java index 1251b8b4..e5646434 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java @@ -12,12 +12,16 @@ public final class EncodableFibonacciIntegerRange extends AbstractDirtyableBitSt public EncodableFibonacciIntegerRange() { super(true); - this.value = new IntegerSet(); + } + + @Override + protected IntegerSet getDefaultValue() { + return new IntegerSet(); } public void encode(BitStringBuilder builder) { try { - FibonacciIntegerRangeEncoder.encode(builder, this.value); + FibonacciIntegerRangeEncoder.encode(builder, this.getValue()); } catch (Exception e) { throw new EncodingException(e); } @@ -33,8 +37,9 @@ public void decode(BitStringReader reader) { @SuppressWarnings("unchecked") @Override - public void setValue(Object value) { - this.value.clear(); - this.value.addAll((Collection) value); + public void setValue(Object newValue) { + IntegerSet value = this.getValue(); + value.clear(); + value.addAll((Collection) newValue); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java index af670eb5..495f6e38 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java @@ -15,12 +15,16 @@ public final class EncodableFixedBitfield extends AbstractDirtyableBitStringData public EncodableFixedBitfield(int numElements) { super(true); this.numElements = numElements; - this.value = new IntegerSet(numElements); + } + + @Override + protected IntegerSet getDefaultValue() { + return new IntegerSet(numElements); } public void encode(BitStringBuilder builder) { try { - FixedBitfieldEncoder.encode(builder, this.value, this.numElements); + FixedBitfieldEncoder.encode(builder, this.getValue(), this.numElements); } catch (Exception e) { throw new EncodingException(e); } @@ -36,8 +40,9 @@ public void decode(BitStringReader reader) { @SuppressWarnings("unchecked") @Override - public void setValue(Object value) { - this.value.clear(); - this.value.addAll((Collection) value); + public void setValue(Object newValue) { + IntegerSet value = this.getValue(); + value.clear(); + value.addAll((Collection) newValue); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java index 5f7681d6..7e249edf 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java @@ -5,6 +5,7 @@ import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerListEncoder; +import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -17,12 +18,16 @@ public EncodableFixedIntegerList(int elementBitStringLength, int numElements) { super(true); this.elementBitStringLength = elementBitStringLength; this.numElements = numElements; - super.setValue(new FixedIntegerList(elementBitStringLength, numElements), false); + } + + @Override + protected FixedIntegerList getDefaultValue() { + return new FixedIntegerList(elementBitStringLength, numElements); } public void encode(BitStringBuilder builder) { try { - FixedIntegerListEncoder.encode(builder, this.value, this.elementBitStringLength, this.numElements); + FixedIntegerListEncoder.encode(builder, this.getValue(), this.elementBitStringLength, this.numElements); } catch (Exception e) { throw new EncodingException(e); } @@ -30,7 +35,7 @@ public void encode(BitStringBuilder builder) { public void decode(BitStringReader reader) { try { - FixedIntegerListEncoder.decode(this.value, reader, this.elementBitStringLength); + FixedIntegerListEncoder.decode(this.getValue(), reader, this.elementBitStringLength); } catch (Exception e) { throw new DecodingException(e); } @@ -38,13 +43,14 @@ public void decode(BitStringReader reader) { @SuppressWarnings("unchecked") @Override - public void setValue(Object value) { - List list = (List) value; + public void setValue(Object newValue) { + FixedIntegerList value = this.getValue(); + List list = (List) newValue; int size = list.size(); for (int i = 0; i < numElements; i++) { - this.value.set(i, i < size ? list.get(i) : 0); + value.set(i, i < size ? list.get(i) : 0); } // call validator - super.setValue(this.value); + super.setValue(value); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java index 01411792..c9b523a4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java @@ -12,12 +12,16 @@ public final class EncodableFixedIntegerRange extends AbstractDirtyableBitString protected EncodableFixedIntegerRange() { super(true); - this.value = new IntegerSet(); + } + + @Override + protected IntegerSet getDefaultValue() { + return new IntegerSet(); } public void encode(BitStringBuilder builder) { try { - FixedIntegerRangeEncoder.encode(builder, this.value); + FixedIntegerRangeEncoder.encode(builder, this.getValue()); } catch (Exception e) { throw new EncodingException(e); } @@ -33,8 +37,9 @@ public void decode(BitStringReader reader) { @SuppressWarnings("unchecked") @Override - public void setValue(Object value) { - this.value.clear(); - this.value.addAll((Collection) value); + public void setValue(Object newValue) { + IntegerSet value = this.getValue(); + value.clear(); + value.addAll((Collection) newValue); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java index 7b983090..a47a5553 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java @@ -17,12 +17,16 @@ public final class EncodableFlexibleBitfield extends AbstractDirtyableBitStringD public EncodableFlexibleBitfield(IntSupplier getLengthSupplier) { super(true); this.getLengthSupplier = getLengthSupplier; - this.value = new IntegerSet(); + } + + @Override + protected IntegerSet getDefaultValue() { + return new IntegerSet(); } public void encode(BitStringBuilder builder) { try { - FixedBitfieldEncoder.encode(builder, this.value, this.getLengthSupplier.getAsInt()); + FixedBitfieldEncoder.encode(builder, this.getValue(), this.getLengthSupplier.getAsInt()); } catch (Exception e) { throw new EncodingException(e); } @@ -39,8 +43,9 @@ public void decode(BitStringReader reader) { @SuppressWarnings("unchecked") @Override - public void setValue(Object value) { - this.value.clear(); - this.value.addAll((Collection) value); + public void setValue(Object newValue) { + IntegerSet value = this.getValue(); + value.clear(); + value.addAll((Collection) newValue); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java index 12858d8f..db893545 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java @@ -13,12 +13,16 @@ public final class EncodableOptimizedFixedRange extends AbstractDirtyableBitStri public EncodableOptimizedFixedRange() { super(true); - this.value = new IntegerSet(); + } + + @Override + protected IntegerSet getDefaultValue() { + return new IntegerSet(); } public void encode(BitStringBuilder builder) { try { - OptimizedFixedRangeEncoder.encode(builder, this.value); + OptimizedFixedRangeEncoder.encode(builder, this.getValue()); } catch (Exception e) { throw new EncodingException(e); } @@ -34,8 +38,9 @@ public void decode(BitStringReader reader) { @SuppressWarnings("unchecked") @Override - public void setValue(Object value) { - this.value.clear(); - this.value.addAll((Collection) value); + public void setValue(Object newValue) { + IntegerSet value = this.getValue(); + value.clear(); + value.addAll((Collection) newValue); } } From cc1ebac46f0dead59ee5aa6d35f51d2b66c78b15 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Mon, 2 Feb 2026 20:08:43 -0500 Subject: [PATCH 53/86] make tests pass --- .../java/com/iab/gpp/encoder/bitstring/BitString.java | 6 ++++++ .../gpp/encoder/datatype/EncodableFixedIntegerList.java | 3 +-- .../encoder/datatype/encoder/FixedIntegerListEncoder.java | 8 -------- .../datatype/encoder/FixedIntegerListEncoderTest.java | 7 ++++--- 4 files changed, 11 insertions(+), 13 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java index 499b779b..f3831bf6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java @@ -35,10 +35,16 @@ public static final BitString of(String str) { } public IntegerSet toIntegerSet(int from, int to) { + if (to > length) { + throw new DecodingException("Bit string access out of range"); + } return new IntegerSet(bitSet, from, to, 1); } public FixedIntegerList toFixedIntegerList(int from, int elementSize, int size) { + if ((from + elementSize * size) > length) { + throw new DecodingException("Bit string access out of range"); + } return new FixedIntegerList(bitSet, from, elementSize, size); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java index 7e249edf..8765aa14 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java @@ -5,7 +5,6 @@ import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerListEncoder; -import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -35,7 +34,7 @@ public void encode(BitStringBuilder builder) { public void decode(BitStringReader reader) { try { - FixedIntegerListEncoder.decode(this.getValue(), reader, this.elementBitStringLength); + this.value = reader.readFixedIntegerList(elementBitStringLength, numElements); } catch (Exception e) { throw new DecodingException(e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java index d21dfc71..56b95ebb 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java @@ -27,12 +27,4 @@ public static void encode(BitStringBuilder builder, List value, int ele } } } - - public static void decode(FixedIntegerList out, BitStringReader reader, int elementBitStringLength) - throws DecodingException { - int size = out.size(); - for (int i = 0; i < size; i++) { - out.setInt(i, reader.readInt(elementBitStringLength)); - } - } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoderTest.java index f2868afe..4f809d17 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoderTest.java @@ -8,6 +8,7 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringReader; +import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -152,9 +153,9 @@ public void testEncode19() { } private FixedIntegerList decode(String str) { - FixedIntegerList out = new FixedIntegerList(2, 2); - FixedIntegerListEncoder.decode(out, new BitStringReader(BitString.of(str)), 2); - return out; + EncodableFixedIntegerList encodable = new EncodableFixedIntegerList(2, 2); + encodable.decode(new BitStringReader(BitString.of(str))); + return encodable.getValue(); } @Test From e0840d0f46cf681a76ffe1e36c577d2de5a94a84 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 3 Feb 2026 11:58:16 -0500 Subject: [PATCH 54/86] unify bit string --- .../base64/AbstractBase64UrlEncoder.java | 8 +- .../base64/CompressedBase64UrlEncoder.java | 4 +- .../base64/TraditionalBase64UrlEncoder.java | 4 +- .../iab/gpp/encoder/bitstring/BitString.java | 127 ++++++++++++++---- .../encoder/bitstring/BitStringBuilder.java | 51 ------- .../encoder/bitstring/BitStringReader.java | 70 ---------- .../EncodableArrayOfFixedIntegerRanges.java | 8 +- .../encoder/datatype/EncodableBoolean.java | 7 +- .../encoder/datatype/EncodableDataType.java | 7 +- .../encoder/datatype/EncodableDatetime.java | 8 +- .../datatype/EncodableFibonacciInteger.java | 7 +- .../EncodableFibonacciIntegerRange.java | 7 +- .../datatype/EncodableFixedBitfield.java | 7 +- .../datatype/EncodableFixedInteger.java | 7 +- .../datatype/EncodableFixedIntegerList.java | 8 +- .../datatype/EncodableFixedIntegerRange.java | 7 +- .../datatype/EncodableFixedString.java | 7 +- .../datatype/EncodableFlexibleBitfield.java | 8 +- .../EncodableOptimizedFixedRange.java | 7 +- .../encoder/datatype/UnencodableBoolean.java | 7 +- .../datatype/encoder/BooleanEncoder.java | 3 +- .../datatype/encoder/DatetimeEncoder.java | 8 +- .../encoder/FibonacciIntegerEncoder.java | 4 +- .../encoder/FibonacciIntegerRangeEncoder.java | 11 +- .../encoder/FixedBitfieldEncoder.java | 4 +- .../datatype/encoder/FixedIntegerEncoder.java | 3 +- .../encoder/FixedIntegerListEncoder.java | 8 +- .../encoder/FixedIntegerRangeEncoder.java | 13 +- .../datatype/encoder/FixedLongEncoder.java | 3 +- .../datatype/encoder/FixedStringEncoder.java | 7 +- .../encoder/OptimizedFixedRangeEncoder.java | 9 +- .../segment/AbstractBase64Segment.java | 7 +- .../gpp/encoder/segment/UsNatCoreSegment.java | 5 +- .../TraditionalBase64UrlEncoderTest.java | 2 - .../EncodableFixedIntegerRangeTest.java | 14 +- .../EncodableOptimizedFixedRangeTest.java | 26 ++-- .../datatype/encoder/BooleanEncoderTest.java | 13 +- .../datatype/encoder/DatetimeEncoderTest.java | 8 +- .../encoder/FibonacciIntegerEncoderTest.java | 34 +++-- .../FibonacciIntegerRangeEncoderTest.java | 32 +++-- .../encoder/FixedBitfieldEncoderTest.java | 32 +++-- .../encoder/FixedIntegerEncoderTest.java | 26 ++-- .../encoder/FixedIntegerListEncoderTest.java | 78 ++++++----- .../encoder/FixedIntegerRangeEncoderTest.java | 40 +++--- .../encoder/FixedLongEncoderTest.java | 30 ++--- .../encoder/FixedStringEncoderTest.java | 14 +- 46 files changed, 350 insertions(+), 450 deletions(-) delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringBuilder.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringReader.java diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java index 39a29ac0..8dfa2d73 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java @@ -3,14 +3,13 @@ import java.util.Arrays; import com.iab.gpp.encoder.bitstring.BitSet; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; public abstract class AbstractBase64UrlEncoder { - protected abstract void pad(BitStringBuilder bitString); + protected abstract void pad(BitString bitString); private static final int BASE64_BITS = 6; private static final int NO_SYMBOL = -1; @@ -32,9 +31,8 @@ public abstract class AbstractBase64UrlEncoder { } } - public StringBuilder encode(BitStringBuilder bitStringBuilder) { - pad(bitStringBuilder); - BitString bitString = bitStringBuilder.build(); + public StringBuilder encode(BitString bitString) { + pad(bitString); int length = bitString.length(); StringBuilder str = new StringBuilder(length / BASE64_BITS); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/CompressedBase64UrlEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/CompressedBase64UrlEncoder.java index f94ceb3a..c890b722 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/CompressedBase64UrlEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/CompressedBase64UrlEncoder.java @@ -1,6 +1,6 @@ package com.iab.gpp.encoder.base64; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitString; public final class CompressedBase64UrlEncoder extends AbstractBase64UrlEncoder { @@ -15,7 +15,7 @@ public static CompressedBase64UrlEncoder getInstance() { } @Override - protected void pad(BitStringBuilder bitString) { + protected void pad(BitString bitString) { int remainder = bitString.length() % 8; if(remainder > 0) { int padding = 8 - remainder; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoder.java index 43c8e866..043d5bb1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoder.java @@ -1,6 +1,6 @@ package com.iab.gpp.encoder.base64; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitString; public final class TraditionalBase64UrlEncoder extends AbstractBase64UrlEncoder { @@ -15,7 +15,7 @@ public static TraditionalBase64UrlEncoder getInstance() { } @Override - protected void pad(BitStringBuilder bitString) { + protected void pad(BitString bitString) { int remainder = bitString.length() % 24; if (remainder > 0) { int padding = 24 - remainder; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java index f3831bf6..c18da6c3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java @@ -1,6 +1,9 @@ package com.iab.gpp.encoder.bitstring; import com.iab.gpp.encoder.datatype.FixedIntegerList; +import com.iab.gpp.encoder.datatype.encoder.FibonacciIntegerEncoder; +import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; +import com.iab.gpp.encoder.datatype.encoder.FixedLongEncoder; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; @@ -11,61 +14,139 @@ public final class BitString { public static final String FALSE_STRING = new String(new char[] {FALSE}); private final BitSet bitSet; - private final int length; + private int readIndex; + private int writeIndex; public BitString(BitSet bitSet, int length) { this.bitSet = bitSet; - this.length = length; + this.writeIndex = length; + } + + public BitString() { + this(new BitSet(), 0); } public static final BitString of(String str) { int length = str.length(); - BitStringBuilder builder = new BitStringBuilder(length); + + BitString out = new BitString(new BitSet(length), 0); for (int i = 0; i < length; i++) { char c = str.charAt(i); if (c == TRUE) { - builder.append(true); + out.append(true); } else if (c == FALSE) { - builder.append(false); + out.append(false); } else { throw new DecodingException("Invalid bit string"); } } - return builder.build(); - } - - public IntegerSet toIntegerSet(int from, int to) { - if (to > length) { - throw new DecodingException("Bit string access out of range"); - } - return new IntegerSet(bitSet, from, to, 1); - } - - public FixedIntegerList toFixedIntegerList(int from, int elementSize, int size) { - if ((from + elementSize * size) > length) { - throw new DecodingException("Bit string access out of range"); - } - return new FixedIntegerList(bitSet, from, elementSize, size); + return out; } @Override public String toString() { StringBuilder sb = new StringBuilder(length()); - for (int i = 0; i < length; i++) { + for (int i = 0; i < writeIndex; i++) { sb.append(bitSet.get(i) ? TRUE : FALSE); } return sb.toString(); } public boolean getValue(int i) { - if (i >= length) { + if (i >= writeIndex) { throw new DecodingException("Bit string access out of range"); } return bitSet.get(i); } public int length() { - return length; + return writeIndex; + } + + + public BitString extend(int length) { + this.writeIndex += length; + return this; + } + + public BitString append(boolean value) { + int idx = writeIndex++; + if (value) { + bitSet.set(idx); + } + return this; + } + + public BitString append(BitString other, int from, int to) { + for (int i = from; i < to; i++) { + append(other.getValue(i)); + } + return this; + } + + public BitString append(BitString other) { + int otherLength = other.length(); + for (int i = 0; i < otherLength; i++) { + append(other.bitSet.get(i)); + } + return this; + } + + public int readInt(int length) { + int newReadIndex = readIndex + length; + int out = FixedIntegerEncoder.decode(this, readIndex, newReadIndex); + readIndex = newReadIndex; + return out; + } + + public long readLong(int length) { + int newReadIndex = readIndex + length; + long out = FixedLongEncoder.decode(this, readIndex, newReadIndex); + readIndex = newReadIndex; + return out; + } + + public boolean readBool() { + return getValue(readIndex++); + } + + public int readFibonacci() { + int value = 0; + int readIndex = this.readIndex; + for (int i = 0; i < FibonacciIntegerEncoder.FIBONACCI_LIMIT; i++) { + if (getValue(readIndex + i)) { + // 1X + value += FibonacciIntegerEncoder.FIBONACCI_NUMBERS[i]; + i++; + int next = readIndex + i; + if (getValue(next)) { + // 11 + this.readIndex = next + 1; + return value; + } + } + } + throw new DecodingException("Invalid FibonacciInteger"); + } + + public IntegerSet readIntegerSet(int length) { + int newReadIndex = readIndex + length; + if (newReadIndex > writeIndex) { + throw new DecodingException("Bit string access out of range"); + } + IntegerSet out = new IntegerSet(bitSet, readIndex, newReadIndex, 1); + readIndex = newReadIndex; + return out; + } + + public FixedIntegerList readFixedIntegerList(int elementLength, int length) { + int newReadIndex = readIndex + elementLength * length; + if (newReadIndex > writeIndex) { + throw new DecodingException("Bit string access out of range"); + } + FixedIntegerList out = new FixedIntegerList(bitSet, readIndex, elementLength, length); + readIndex = newReadIndex; + return out; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringBuilder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringBuilder.java deleted file mode 100644 index dc42e85b..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringBuilder.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.iab.gpp.encoder.bitstring; - - -public final class BitStringBuilder { - private final BitSet bitSet; - private int length; - - public BitStringBuilder(int initialCapacity) { - this.bitSet = new BitSet(initialCapacity); - } - - public BitStringBuilder() { - this.bitSet = new BitSet(); - } - - public BitString build() { - return new BitString(bitSet, length); - } - - public BitStringBuilder extend(int length) { - this.length += length; - return this; - } - - public BitStringBuilder append(boolean value) { - int idx = length++; - if (value) { - bitSet.set(idx); - } - return this; - } - - public BitStringBuilder append(BitString other, int from, int to) { - for (int i = from; i < to; i++) { - append(other.getValue(i)); - } - return this; - } - - public int length() { - return length; - } - - public BitStringBuilder append(BitStringBuilder other) { - int otherLength = other.length(); - for (int i = 0; i < otherLength; i++) { - append(other.bitSet.get(i)); - } - return this; - } -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringReader.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringReader.java deleted file mode 100644 index 5a1f92ce..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringReader.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.iab.gpp.encoder.bitstring; - -import com.iab.gpp.encoder.datatype.FixedIntegerList; -import com.iab.gpp.encoder.datatype.encoder.FibonacciIntegerEncoder; -import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; -import com.iab.gpp.encoder.datatype.encoder.FixedLongEncoder; -import com.iab.gpp.encoder.datatype.encoder.IntegerSet; -import com.iab.gpp.encoder.error.DecodingException; - -public final class BitStringReader { - - private int offset = 0; - private final BitString bitString; - - public BitStringReader(BitString bitString) { - this.bitString = bitString; - } - - public int readInt(int length) { - int newOffset = offset + length; - int out = FixedIntegerEncoder.decode(bitString, offset, newOffset); - offset = newOffset; - return out; - } - - public long readLong(int length) { - int newOffset = offset + length; - long out = FixedLongEncoder.decode(bitString, offset, newOffset); - offset = newOffset; - return out; - } - - public boolean readBool() { - return bitString.getValue(offset++); - } - - public int readFibonacci() { - int value = 0; - int offset = this.offset; - for (int i = 0; i < FibonacciIntegerEncoder.FIBONACCI_LIMIT; i++) { - if (bitString.getValue(offset + i)) { - // 1X - value += FibonacciIntegerEncoder.FIBONACCI_NUMBERS[i]; - i++; - int next = offset + i; - if (bitString.getValue(next)) { - // 11 - this.offset = next + 1; - return value; - } - } - } - throw new DecodingException("Invalid FibonacciInteger"); - } - - public IntegerSet readIntegerSet(int length) { - int newOffset = offset + length; - IntegerSet out = bitString.toIntegerSet(offset, newOffset); - offset = newOffset; - return out; - } - - public FixedIntegerList readFixedIntegerList(int elementLength, int length) { - int newOffset = offset + elementLength * length; - FixedIntegerList out = bitString.toFixedIntegerList(offset, elementLength, length); - offset = newOffset; - return out; - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java index e004db1c..17553644 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java @@ -1,9 +1,7 @@ package com.iab.gpp.encoder.datatype; import java.util.List; - -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerRangeEncoder; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; @@ -23,7 +21,7 @@ public EncodableArrayOfFixedIntegerRanges(int keyBitStringLength, int typeBitStr } @Override - public void encode(BitStringBuilder sb) { + public void encode(BitString sb) { try { List entries = this.value; @@ -40,7 +38,7 @@ public void encode(BitStringBuilder sb) { } @Override - public void decode(BitStringReader reader) { + public void decode(BitString reader) { try { int size = reader.readInt(12); value.clear(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java index d04af67c..98149f47 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.datatype; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.BooleanEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -13,7 +12,7 @@ public EncodableBoolean(Boolean value) { setValue(value, false); } - public void encode(BitStringBuilder builder){ + public void encode(BitString builder){ try { BooleanEncoder.encode(builder, this.value); } catch (Exception e) { @@ -21,7 +20,7 @@ public void encode(BitStringBuilder builder){ } } - public void decode(BitStringReader reader) { + public void decode(BitString reader) { try { this.value = reader.readBool(); } catch (Exception e) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDataType.java index ea214e10..b63b410f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDataType.java @@ -1,10 +1,9 @@ package com.iab.gpp.encoder.datatype; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; +import com.iab.gpp.encoder.bitstring.BitString; public abstract class EncodableDataType extends DataType { - public abstract void encode(BitStringBuilder builder); + public abstract void encode(BitString writer); - public abstract void decode(BitStringReader reader); + public abstract void decode(BitString reader); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java index a5589e48..f55252dd 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java @@ -1,9 +1,7 @@ package com.iab.gpp.encoder.datatype; import java.time.Instant; - -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.DatetimeEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -19,7 +17,7 @@ public EncodableDatetime(Instant value) { setValue(value, false); } - public void encode(BitStringBuilder builder) { + public void encode(BitString builder) { try { DatetimeEncoder.encode(builder, this.value); } catch (Exception e) { @@ -27,7 +25,7 @@ public void encode(BitStringBuilder builder) { } } - public void decode(BitStringReader reader) { + public void decode(BitString reader) { try { this.value = DatetimeEncoder.decode(reader); } catch (Exception e) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java index 39a9825d..4e423d38 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.datatype; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FibonacciIntegerEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -22,7 +21,7 @@ public EncodableFibonacciInteger(Integer value, boolean hardFailIfMissing) { setValue(value, false); } - public void encode(BitStringBuilder builder) { + public void encode(BitString builder) { try { FibonacciIntegerEncoder.encode(builder, this.value); } catch (Exception e) { @@ -30,7 +29,7 @@ public void encode(BitStringBuilder builder) { } } - public void decode(BitStringReader reader) { + public void decode(BitString reader) { try { this.value = reader.readFibonacci(); } catch (Exception e) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java index e5646434..8f69fc2e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java @@ -1,8 +1,7 @@ package com.iab.gpp.encoder.datatype; import java.util.Collection; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FibonacciIntegerRangeEncoder; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; @@ -19,7 +18,7 @@ protected IntegerSet getDefaultValue() { return new IntegerSet(); } - public void encode(BitStringBuilder builder) { + public void encode(BitString builder) { try { FibonacciIntegerRangeEncoder.encode(builder, this.getValue()); } catch (Exception e) { @@ -27,7 +26,7 @@ public void encode(BitStringBuilder builder) { } } - public void decode(BitStringReader reader) { + public void decode(BitString reader) { try { this.value = FibonacciIntegerRangeEncoder.decode(reader); } catch (Exception e) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java index 495f6e38..a5281426 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java @@ -1,8 +1,7 @@ package com.iab.gpp.encoder.datatype; import java.util.Collection; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedBitfieldEncoder; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; @@ -22,7 +21,7 @@ protected IntegerSet getDefaultValue() { return new IntegerSet(numElements); } - public void encode(BitStringBuilder builder) { + public void encode(BitString builder) { try { FixedBitfieldEncoder.encode(builder, this.getValue(), this.numElements); } catch (Exception e) { @@ -30,7 +29,7 @@ public void encode(BitStringBuilder builder) { } } - public void decode(BitStringReader reader) { + public void decode(BitString reader) { try { this.value = reader.readIntegerSet(this.numElements); } catch (Exception e) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java index 12a1800a..3896c068 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.datatype; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -21,7 +20,7 @@ public EncodableFixedInteger(int bitStringLength, Integer value) { setValue(value, false); } - public void encode(BitStringBuilder builder) { + public void encode(BitString builder) { try { FixedIntegerEncoder.encode(builder, this.value, this.bitStringLength); } catch (Exception e) { @@ -29,7 +28,7 @@ public void encode(BitStringBuilder builder) { } } - public void decode(BitStringReader reader) { + public void decode(BitString reader) { try { this.value = reader.readInt(bitStringLength); } catch (Exception e) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java index 8765aa14..3d5e411e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java @@ -1,9 +1,7 @@ package com.iab.gpp.encoder.datatype; import java.util.List; - -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerListEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -24,7 +22,7 @@ protected FixedIntegerList getDefaultValue() { return new FixedIntegerList(elementBitStringLength, numElements); } - public void encode(BitStringBuilder builder) { + public void encode(BitString builder) { try { FixedIntegerListEncoder.encode(builder, this.getValue(), this.elementBitStringLength, this.numElements); } catch (Exception e) { @@ -32,7 +30,7 @@ public void encode(BitStringBuilder builder) { } } - public void decode(BitStringReader reader) { + public void decode(BitString reader) { try { this.value = reader.readFixedIntegerList(elementBitStringLength, numElements); } catch (Exception e) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java index c9b523a4..e9aac727 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java @@ -1,8 +1,7 @@ package com.iab.gpp.encoder.datatype; import java.util.Collection; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerRangeEncoder; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; @@ -19,7 +18,7 @@ protected IntegerSet getDefaultValue() { return new IntegerSet(); } - public void encode(BitStringBuilder builder) { + public void encode(BitString builder) { try { FixedIntegerRangeEncoder.encode(builder, this.getValue()); } catch (Exception e) { @@ -27,7 +26,7 @@ public void encode(BitStringBuilder builder) { } } - public void decode(BitStringReader reader) { + public void decode(BitString reader) { try { this.value = FixedIntegerRangeEncoder.decode(reader); } catch (Exception e) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java index f9606b32..740b7de7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.datatype; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedStringEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -21,7 +20,7 @@ public EncodableFixedString(int stringLength, String value) { setValue(value, false); } - public void encode(BitStringBuilder builder) { + public void encode(BitString builder) { try { FixedStringEncoder.encode(builder, this.value, this.stringLength); } catch (Exception e) { @@ -29,7 +28,7 @@ public void encode(BitStringBuilder builder) { } } - public void decode(BitStringReader reader) { + public void decode(BitString reader) { try { this.value = FixedStringEncoder.decode(reader, this.stringLength); } catch (Exception e) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java index a47a5553..20b2bce9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java @@ -2,9 +2,7 @@ import java.util.Collection; import java.util.function.IntSupplier; - -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedBitfieldEncoder; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; @@ -24,7 +22,7 @@ protected IntegerSet getDefaultValue() { return new IntegerSet(); } - public void encode(BitStringBuilder builder) { + public void encode(BitString builder) { try { FixedBitfieldEncoder.encode(builder, this.getValue(), this.getLengthSupplier.getAsInt()); } catch (Exception e) { @@ -32,7 +30,7 @@ public void encode(BitStringBuilder builder) { } } - public void decode(BitStringReader reader) { + public void decode(BitString reader) { try { this.value = reader.readIntegerSet(getLengthSupplier.getAsInt()); } catch (Exception e) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java index db893545..7d6ebbfe 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java @@ -1,8 +1,7 @@ package com.iab.gpp.encoder.datatype; import java.util.Collection; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.datatype.encoder.OptimizedFixedRangeEncoder; import com.iab.gpp.encoder.error.DecodingException; @@ -20,7 +19,7 @@ protected IntegerSet getDefaultValue() { return new IntegerSet(); } - public void encode(BitStringBuilder builder) { + public void encode(BitString builder) { try { OptimizedFixedRangeEncoder.encode(builder, this.getValue()); } catch (Exception e) { @@ -28,7 +27,7 @@ public void encode(BitStringBuilder builder) { } } - public void decode(BitStringReader reader) { + public void decode(BitString reader) { try { this.value = OptimizedFixedRangeEncoder.decode(reader); } catch (Exception e) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java index 4068bf7c..71171ecd 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.datatype; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; +import com.iab.gpp.encoder.bitstring.BitString; public final class UnencodableBoolean extends AbstractEncodableBitStringDataType { @@ -14,11 +13,11 @@ public UnencodableBoolean(Boolean value) { setValue(value, false); } - public void encode(BitStringBuilder builder){ + public void encode(BitString builder){ // pass } - public void decode(BitStringReader reader) { + public void decode(BitString reader) { // pass } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoder.java index 8787b4f9..c3d07392 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoder.java @@ -1,13 +1,12 @@ package com.iab.gpp.encoder.datatype.encoder; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; public class BooleanEncoder { private BooleanEncoder() {} - public static void encode(BitStringBuilder builder, Boolean value) { + public static void encode(BitString builder, Boolean value) { if (value == null) { throw new EncodingException("Unencodable Boolean '" + value + "'"); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java index ed83bb99..c7e8c764 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java @@ -1,16 +1,14 @@ package com.iab.gpp.encoder.datatype.encoder; import java.time.Instant; - -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; public class DatetimeEncoder { private DatetimeEncoder() {} - public static void encode(BitStringBuilder builder, Instant value) { + public static void encode(BitString builder, Instant value) { if (value != null) { FixedLongEncoder.encode(builder, value.toEpochMilli() / 100, 36); } else { @@ -18,7 +16,7 @@ public static void encode(BitStringBuilder builder, Instant value) { } } - public static Instant decode(BitStringReader reader) throws DecodingException { + public static Instant decode(BitString reader) throws DecodingException { return Instant.ofEpochMilli(reader.readLong(36) * 100L); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java index 869d287d..0e0c6579 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java @@ -1,6 +1,6 @@ package com.iab.gpp.encoder.datatype.encoder; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.EncodingException; public class FibonacciIntegerEncoder { @@ -22,7 +22,7 @@ private FibonacciIntegerEncoder() {} } } - public static void encode(BitStringBuilder builder, int value) { + public static void encode(BitString builder, int value) { int largestIndex = 0; for (int i = 0; i < FIBONACCI_LIMIT; i++) { if (value >= FIBONACCI_NUMBERS[i]) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java index beef3289..81829415 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java @@ -1,15 +1,14 @@ package com.iab.gpp.encoder.datatype.encoder; import java.util.Collection; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; public class FibonacciIntegerRangeEncoder { private FibonacciIntegerRangeEncoder() {} - public static int encode(BitStringBuilder builder, Collection value) { - BitStringBuilder rangeBuilder = new BitStringBuilder(); + public static int encode(BitString builder, Collection value) { + BitString rangeBuilder = new BitString(); int groupStart = -1; int last = Integer.MIN_VALUE; int offset = 0; @@ -34,7 +33,7 @@ public static int encode(BitStringBuilder builder, Collection value) { return last; } - private static void writeGroup(BitStringBuilder builder, int groupStart, int last, int offset) { + private static void writeGroup(BitString builder, int groupStart, int last, int offset) { int base = groupStart - offset; int span = last - groupStart; if (span == 0) { @@ -47,7 +46,7 @@ private static void writeGroup(BitStringBuilder builder, int groupStart, int las } } - public static IntegerSet decode(BitStringReader reader) throws DecodingException { + public static IntegerSet decode(BitString reader) throws DecodingException { int count = reader.readInt(12); IntegerSet value = new IntegerSet(); int offset = 0; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java index 5b5b0b3d..2f649ab0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java @@ -1,11 +1,11 @@ package com.iab.gpp.encoder.datatype.encoder; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitString; public class FixedBitfieldEncoder { private FixedBitfieldEncoder() {} - public static void encode(BitStringBuilder builder, IntegerSet value, int bitStringLength) { + public static void encode(BitString builder, IntegerSet value, int bitStringLength) { for (int i = 0; i < bitStringLength; i++) { BooleanEncoder.encode(builder, value.containsInt(i)); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoder.java index f130e6e3..85b0cd82 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoder.java @@ -1,14 +1,13 @@ package com.iab.gpp.encoder.datatype.encoder; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; public class FixedIntegerEncoder { private FixedIntegerEncoder() {} - public static void encode(BitStringBuilder builder, int value, int bitStringLength) { + public static void encode(BitString builder, int value, int bitStringLength) { int mask = 1 << bitStringLength; if (value >= mask) { throw new EncodingException( diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java index 56b95ebb..647ad51f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java @@ -1,17 +1,13 @@ package com.iab.gpp.encoder.datatype.encoder; import java.util.List; - -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; -import com.iab.gpp.encoder.datatype.FixedIntegerList; -import com.iab.gpp.encoder.error.DecodingException; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.EncodingException; public class FixedIntegerListEncoder { private FixedIntegerListEncoder() {} - public static void encode(BitStringBuilder builder, List value, int elementBitStringLength, int numElements) { + public static void encode(BitString builder, List value, int elementBitStringLength, int numElements) { int length = value.size(); if (length > numElements) { throw new EncodingException("Too many values '" + value.size() + "'"); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java index 0b12b0ea..9016674c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java @@ -1,15 +1,14 @@ package com.iab.gpp.encoder.datatype.encoder; import java.util.Collection; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; public class FixedIntegerRangeEncoder { private FixedIntegerRangeEncoder() {} - public static int encode(BitStringBuilder builder, Collection value) { - BitStringBuilder rangeBuilder = new BitStringBuilder(); + public static int encode(BitString builder, Collection value) { + BitString rangeBuilder = new BitString(); int groupStart = -1; int last = Integer.MIN_VALUE; int groupCount = 0; @@ -27,12 +26,12 @@ public static int encode(BitStringBuilder builder, Collection value) { groupCount++; writeGroup(rangeBuilder, groupStart, last); } - FixedIntegerEncoder.encode(builder,groupCount, 12); + FixedIntegerEncoder.encode(builder, groupCount, 12); builder.append(rangeBuilder); return last; } - private static void writeGroup(BitStringBuilder builder, int groupStart, int last) { + private static void writeGroup(BitString builder, int groupStart, int last) { if (groupStart == last) { builder.append(false); FixedIntegerEncoder.encode(builder, groupStart, 16); @@ -43,7 +42,7 @@ private static void writeGroup(BitStringBuilder builder, int groupStart, int las } } - public static IntegerSet decode(BitStringReader reader) throws DecodingException { + public static IntegerSet decode(BitString reader) throws DecodingException { int count = reader.readInt(12); IntegerSet value = new IntegerSet(); for (int i = 0; i < count; i++) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoder.java index 9f0c6ef5..bc326030 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoder.java @@ -1,14 +1,13 @@ package com.iab.gpp.encoder.datatype.encoder; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; public class FixedLongEncoder { private FixedLongEncoder() {} - public static void encode(BitStringBuilder builder, long value, int bitStringLength) { + public static void encode(BitString builder, long value, int bitStringLength) { long mask = 1L << bitStringLength; if (value >= mask) { throw new EncodingException( diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java index 2b6f3cee..9587baf8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java @@ -1,14 +1,13 @@ package com.iab.gpp.encoder.datatype.encoder; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.EncodingException; public class FixedStringEncoder { private FixedStringEncoder() {} private static final char SPACE = ' '; - public static void encode(BitStringBuilder builder, String value, int stringLength) { + public static void encode(BitString builder, String value, int stringLength) { int length = value.length(); for (int i = 0; i < stringLength; i++) { int code = SPACE; @@ -25,7 +24,7 @@ public static void encode(BitStringBuilder builder, String value, int stringLeng } } - public static String decode(BitStringReader reader, int length) { + public static String decode(BitString reader, int length) { StringBuilder value = new StringBuilder(length); for (int i = 0; i < length; i++) { int code = reader.readInt(6); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java index c264e91a..3a89e381 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java @@ -1,16 +1,15 @@ package com.iab.gpp.encoder.datatype.encoder; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; public class OptimizedFixedRangeEncoder { - public static void encode(BitStringBuilder builder, IntegerSet value) throws EncodingException { + public static void encode(BitString builder, IntegerSet value) throws EncodingException { // TODO: encoding the range before choosing the shortest is inefficient. There is probably a way // to identify in advance which will be shorter based on the array length and values - BitStringBuilder rangeBitString = new BitStringBuilder(); + BitString rangeBitString = new BitString(); int max = FixedIntegerRangeEncoder.encode(rangeBitString, value); int rangeLength = rangeBitString.length(); int bitFieldLength = max; @@ -27,7 +26,7 @@ public static void encode(BitStringBuilder builder, IntegerSet value) throws Enc } } - public static IntegerSet decode(BitStringReader reader) throws DecodingException { + public static IntegerSet decode(BitString reader) throws DecodingException { int size = reader.readInt(16); if (reader.readBool()) { return FixedIntegerRangeEncoder.decode(reader); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java index 05af6a33..16d2bd50 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java @@ -3,8 +3,6 @@ import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.datatype.AbstractEncodableBitStringDataType; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -23,7 +21,7 @@ protected AbstractBase64UrlEncoder getBase64UrlEncoder() { @Override protected final CharSequence doEncode() { - BitStringBuilder bitString = new BitStringBuilder(); + BitString bitString = new BitString(); int size = fieldNames.size(); for (int i = 0; i < size; i++) { AbstractEncodableBitStringDataType field = get(i); @@ -42,12 +40,11 @@ protected final void doDecode(CharSequence encodedString) { try { BitString bitString = decodeBitString(encodedString); int size = fieldNames.size(); - BitStringReader reader = new BitStringReader(bitString); for (int i = 0; i < size; i++) { AbstractEncodableBitStringDataType field = get(i); if (field != null) { try { - field.decode(reader); + field.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode " + fieldNames.get(i), e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java index f2ee5ad3..369c25bb 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.segment; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsNatField; @@ -52,14 +51,14 @@ protected BitString decodeBitString(CharSequence encodedString) { // length of 12 to 16 and known child sensitive data consents changed from a length of 2 to 3 in the // DE, IA, NE, NH, NJ, TN release if (bitString.length() == 66) { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); builder.append(bitString, 0, 48); builder.extend(8); builder.append(bitString, 48, 52); builder.extend(2); builder.append(bitString, 52, 62); - bitString = builder.build(); + bitString = builder; } return bitString; } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoderTest.java index a4fb89dc..e9821ca9 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoderTest.java @@ -2,8 +2,6 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; public class TraditionalBase64UrlEncoderTest { diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java index 638d19da..aa179348 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java @@ -6,8 +6,6 @@ import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -17,31 +15,31 @@ public class EncodableFixedIntegerRangeTest { public void testEncode1() throws EncodingException { EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange(); encodableFixedIntegerRange.setValue(Arrays.asList(28)); - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); encodableFixedIntegerRange.encode(builder); - Assertions.assertEquals("00000000000100000000000011100", builder.build().toString()); + Assertions.assertEquals("00000000000100000000000011100", builder.toString()); } @Test public void testEncode2() throws EncodingException { EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange(); encodableFixedIntegerRange.setValue(Arrays.asList(29)); - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); encodableFixedIntegerRange.encode(builder); - Assertions.assertEquals("00000000000100000000000011101", builder.build().toString()); + Assertions.assertEquals("00000000000100000000000011101", builder.toString()); } @Test public void testDecode1() throws DecodingException { EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange(); - encodableFixedIntegerRange.decode(new BitStringReader(BitString.of("00000000000100000000000011100"))); + encodableFixedIntegerRange.decode(BitString.of("00000000000100000000000011100")); Assertions.assertEquals(Set.of(28), encodableFixedIntegerRange.getValue()); } @Test public void testDecode2() throws DecodingException { EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange(); - encodableFixedIntegerRange.decode(new BitStringReader(BitString.of("00000000000100000000000011101"))); + encodableFixedIntegerRange.decode(BitString.of("00000000000100000000000011101")); Assertions.assertEquals(Set.of(29), encodableFixedIntegerRange.getValue()); } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java index d73c6e91..a0b43588 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java @@ -6,8 +6,6 @@ import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; public class EncodableOptimizedFixedRangeTest { @@ -16,57 +14,57 @@ public class EncodableOptimizedFixedRangeTest { @Test public void testEncode1() { encodableOptimizedFixedRange.setValue(Arrays.asList(12, 24, 48)); - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); encodableOptimizedFixedRange.encode(builder); Assertions.assertEquals("00000000001100000000000000001000000000001000000000000000000000001", - builder.build().toString()); + builder.toString()); } @Test public void testEncode2() { encodableOptimizedFixedRange.setValue(Arrays.asList(18, 30)); - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); encodableOptimizedFixedRange.encode(builder); - Assertions.assertEquals("00000000000111100000000000000000001000000000001", builder.build().toString()); + Assertions.assertEquals("00000000000111100000000000000000001000000000001", builder.toString()); } @Test public void testEncode3() { encodableOptimizedFixedRange.setValue(Arrays.asList(28)); - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); encodableOptimizedFixedRange.encode(builder); - Assertions.assertEquals("000000000001110000000000000000000000000000001", builder.build().toString()); + Assertions.assertEquals("000000000001110000000000000000000000000000001", builder.toString()); } @Test public void testEncode4() { encodableOptimizedFixedRange.setValue(Arrays.asList(29)); - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); encodableOptimizedFixedRange.encode(builder); - Assertions.assertEquals("0000000000011101100000000000100000000000011101", builder.build().toString()); + Assertions.assertEquals("0000000000011101100000000000100000000000011101", builder.toString()); } @Test public void testDecode1() { - encodableOptimizedFixedRange.decode(new BitStringReader(BitString.of("00000000001100000000000000001000000000001000000000000000000000001"))); + encodableOptimizedFixedRange.decode(BitString.of("00000000001100000000000000001000000000001000000000000000000000001")); Assertions.assertEquals(Set.of(12, 24, 48), encodableOptimizedFixedRange.getValue()); } @Test public void testDecode2() { - encodableOptimizedFixedRange.decode(new BitStringReader(BitString.of("00000000000111100000000000000000001000000000001"))); + encodableOptimizedFixedRange.decode(BitString.of("00000000000111100000000000000000001000000000001")); Assertions.assertEquals(Set.of(18, 30), encodableOptimizedFixedRange.getValue()); } @Test public void testDecode3() { - encodableOptimizedFixedRange.decode(new BitStringReader(BitString.of("000000000001110000000000000000000000000000001"))); + encodableOptimizedFixedRange.decode(BitString.of("000000000001110000000000000000000000000000001")); Assertions.assertEquals(Set.of(28), encodableOptimizedFixedRange.getValue()); } @Test public void testDecode4() { - encodableOptimizedFixedRange.decode(new BitStringReader(BitString.of("0000000000011101100000000000100000000000011101"))); + encodableOptimizedFixedRange.decode(BitString.of("0000000000011101100000000000100000000000011101")); Assertions.assertEquals(Set.of(29), encodableOptimizedFixedRange.getValue()); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoderTest.java index 0a499084..b3fda6c2 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoderTest.java @@ -4,28 +4,29 @@ import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.error.DecodingException; public class BooleanEncoderTest { @Test public void testEncode1() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); BooleanEncoder.encode(builder, false); - Assertions.assertEquals("0", builder.build().toString()); + Assertions.assertEquals("0", builder.toString()); } @Test public void testEncode2() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); BooleanEncoder.encode(builder, true); - Assertions.assertEquals("1", builder.build().toString()); + Assertions.assertEquals("1", builder.toString()); } @Test public void testDecode1() { - Assertions.assertEquals(false, BooleanEncoder.decode(BitString.of("0"))); + BitString x = BitString.of("0"); + System.out.println(x); + Assertions.assertEquals(false, BooleanEncoder.decode(x)); } @Test diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoderTest.java index 73f74cb9..7e35100d 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoderTest.java @@ -5,8 +5,6 @@ import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; public class DatetimeEncoderTest { @@ -14,10 +12,10 @@ public class DatetimeEncoderTest { @Test public void test1() throws DecodingException { Instant date1 = Instant.now(); - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); DatetimeEncoder.encode(builder, date1); - String encodedDate1 = builder.build().toString(); - Instant date2 = DatetimeEncoder.decode(new BitStringReader(BitString.of(encodedDate1))); + String encodedDate1 = builder.toString(); + Instant date2 = DatetimeEncoder.decode(BitString.of(encodedDate1)); Assertions.assertEquals((date1.toEpochMilli() / 100L) * 100L, date2.toEpochMilli()); } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java index 060a25c1..f2e5c394 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java @@ -4,8 +4,6 @@ import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -13,62 +11,62 @@ public class FibonacciIntegerEncoderTest { @Test public void testEncode1() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FibonacciIntegerEncoder.encode(builder, 1); - Assertions.assertEquals("11", builder.build().toString()); + Assertions.assertEquals("11", builder.toString()); } @Test public void testEncode2() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FibonacciIntegerEncoder.encode(builder, 2); - Assertions.assertEquals("011", builder.build().toString()); + Assertions.assertEquals("011", builder.toString()); } @Test public void testEncode3() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FibonacciIntegerEncoder.encode(builder, 3); - Assertions.assertEquals("0011", builder.build().toString()); + Assertions.assertEquals("0011", builder.toString()); } @Test public void testEncode4() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FibonacciIntegerEncoder.encode(builder, 4); - Assertions.assertEquals("1011", builder.build().toString()); + Assertions.assertEquals("1011", builder.toString()); } @Test public void testEncode5() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FibonacciIntegerEncoder.encode(builder, 5); - Assertions.assertEquals("00011", builder.build().toString()); + Assertions.assertEquals("00011", builder.toString()); } @Test public void testEncode6() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FibonacciIntegerEncoder.encode(builder, 6); - Assertions.assertEquals("10011", builder.build().toString()); + Assertions.assertEquals("10011", builder.toString()); } @Test public void testEncode7() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FibonacciIntegerEncoder.encode(builder, 7); - Assertions.assertEquals("01011", builder.build().toString()); + Assertions.assertEquals("01011", builder.toString()); } @Test public void testEncodeTooLarge() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); Assertions.assertThrows(EncodingException.class, () -> FibonacciIntegerEncoder.encode(builder, Integer.MAX_VALUE)); } private int decode(String str) { - return new BitStringReader(BitString.of(str)).readFibonacci(); + return BitString.of(str).readFibonacci(); } @Test diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java index 2c71713c..b1fa03eb 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java @@ -7,65 +7,63 @@ import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; public class FibonacciIntegerRangeEncoderTest { @Test public void testEncode1() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FibonacciIntegerRangeEncoder.encode(builder, new ArrayList<>()); - Assertions.assertEquals("000000000000", builder.build().toString()); + Assertions.assertEquals("000000000000", builder.toString()); } @Test public void testEncode2() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FibonacciIntegerRangeEncoder.encode(builder, Arrays.asList(2)); - Assertions.assertEquals("0000000000010011", builder.build().toString()); + Assertions.assertEquals("0000000000010011", builder.toString()); } @Test public void testEncode3() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FibonacciIntegerRangeEncoder.encode(builder, Arrays.asList(2, 3, 4, 5, 6)); - Assertions.assertEquals("00000000000110111011", builder.build().toString()); + Assertions.assertEquals("00000000000110111011", builder.toString()); } @Test public void testEncode4() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FibonacciIntegerRangeEncoder.encode(builder, Arrays.asList(2, 5, 6, 7)); - Assertions.assertEquals("000000000010001110011011", builder.build().toString()); + Assertions.assertEquals("000000000010001110011011", builder.toString()); } @Test public void testEncode5() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); IntegerSet set = new IntegerSet(); set.addAll(Arrays.asList(6, 7, 2, 5)); FibonacciIntegerRangeEncoder.encode(builder, set); - Assertions.assertEquals("000000000010001110011011", builder.build().toString()); + Assertions.assertEquals("000000000010001110011011", builder.toString()); } @Test public void testEncode6() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FibonacciIntegerRangeEncoder.encode(builder, Arrays.asList(3, 5, 6, 7, 8)); - Assertions.assertEquals("0000000000100001110110011", builder.build().toString()); + Assertions.assertEquals("0000000000100001110110011", builder.toString()); } @Test public void testEncode7() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FibonacciIntegerRangeEncoder.encode(builder, Arrays.asList(2, 5, 6, 7, 8, 9, 10, 11, 12)); - Assertions.assertEquals("00000000001000111001101011", builder.build().toString()); + Assertions.assertEquals("00000000001000111001101011", builder.toString()); } private IntegerSet decode(String str) { - return FibonacciIntegerRangeEncoder.decode(new BitStringReader(BitString.of(str))); + return FibonacciIntegerRangeEncoder.decode(BitString.of(str)); } @Test diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java index 23fdf263..65579a53 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java @@ -5,71 +5,69 @@ import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; public class FixedBitfieldEncoderTest { @Test public void testEncode1() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); IntegerSet set = new IntegerSet(); FixedBitfieldEncoder.encode(builder, set, 2); - Assertions.assertEquals("00", builder.build().toString()); + Assertions.assertEquals("00", builder.toString()); } @Test public void testEncode2() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); IntegerSet set = new IntegerSet(); FixedBitfieldEncoder.encode(builder, set, 1); - Assertions.assertEquals("0", builder.build().toString()); + Assertions.assertEquals("0", builder.toString()); } @Test public void testEncode3() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); IntegerSet set = new IntegerSet(); set.add(0); FixedBitfieldEncoder.encode(builder, set, 1); - Assertions.assertEquals("1", builder.build().toString()); + Assertions.assertEquals("1", builder.toString()); } @Test public void testEncode4() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); IntegerSet set = new IntegerSet(); FixedBitfieldEncoder.encode(builder, set, 2); - Assertions.assertEquals("00", builder.build().toString()); + Assertions.assertEquals("00", builder.toString()); } @Test public void testEncode5() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); IntegerSet set = new IntegerSet(); set.addInt(1); FixedBitfieldEncoder.encode(builder, set, 2); - Assertions.assertEquals("01", builder.build().toString()); + Assertions.assertEquals("01", builder.toString()); } @Test public void testEncode6() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); IntegerSet set = new IntegerSet(); set.addInt(0); FixedBitfieldEncoder.encode(builder, set, 2); - Assertions.assertEquals("10", builder.build().toString()); + Assertions.assertEquals("10", builder.toString()); } @Test public void testEncode7() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); IntegerSet set = new IntegerSet(); set.addInt(0); set.addInt(1); FixedBitfieldEncoder.encode(builder, set, 2); - Assertions.assertEquals("11", builder.build().toString()); + Assertions.assertEquals("11", builder.toString()); } @Test @@ -89,7 +87,7 @@ public void testEncode9() { } private IntegerSet decode(String str) { - return new BitStringReader(BitString.of(str)).readIntegerSet(str.length()); + return BitString.of(str).readIntegerSet(str.length()); } @Test diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoderTest.java index c4d75447..bde7eb8b 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoderTest.java @@ -4,8 +4,6 @@ import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -13,43 +11,43 @@ public class FixedIntegerEncoderTest { @Test public void testEncode1() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerEncoder.encode(builder, 0, 1); - Assertions.assertEquals("0", builder.build().toString()); + Assertions.assertEquals("0", builder.toString()); } @Test public void testEncode2() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerEncoder.encode(builder, 0, 6); - Assertions.assertEquals("000000", builder.build().toString()); + Assertions.assertEquals("000000", builder.toString()); } @Test public void testEncode3() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerEncoder.encode(builder, 1, 1); - Assertions.assertEquals("1", builder.build().toString()); + Assertions.assertEquals("1", builder.toString()); } @Test public void testEncode4() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerEncoder.encode(builder, 1, 4); - Assertions.assertEquals("0001", builder.build().toString()); + Assertions.assertEquals("0001", builder.toString()); } @Test public void testEncode5() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerEncoder.encode(builder, 7, 8); - Assertions.assertEquals("00000111", builder.build().toString()); + Assertions.assertEquals("00000111", builder.toString()); } @Test public void testEncode6() { try { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerEncoder.encode(builder, 8, 1); Assertions.fail("EncodingException expected"); } catch (EncodingException e) { @@ -58,7 +56,7 @@ public void testEncode6() { } private int decode(String str) { - return new BitStringReader(BitString.of(str)).readInt(str.length()); + return BitString.of(str).readInt(str.length()); } @Test diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoderTest.java index 4f809d17..b02f61ee 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoderTest.java @@ -6,8 +6,6 @@ import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.error.DecodingException; @@ -17,134 +15,134 @@ public class FixedIntegerListEncoderTest { @Test public void testEncode1() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerListEncoder.encode(builder, new ArrayList<>(), 2, 2); - Assertions.assertEquals("0000", builder.build().toString()); + Assertions.assertEquals("0000", builder.toString()); } @Test public void testEncode2() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerListEncoder.encode(builder, Arrays.asList(0), 2, 2); - Assertions.assertEquals("0000", builder.build().toString()); + Assertions.assertEquals("0000", builder.toString()); } @Test public void testEncode3() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerListEncoder.encode(builder, Arrays.asList(0, 0), 2, 2); - Assertions.assertEquals("0000", builder.build().toString()); + Assertions.assertEquals("0000", builder.toString()); } @Test public void testEncode4() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerListEncoder.encode(builder, Arrays.asList(0, 1), 2, 2); - Assertions.assertEquals("0001", builder.build().toString()); + Assertions.assertEquals("0001", builder.toString()); } @Test public void testEncode5() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerListEncoder.encode(builder, Arrays.asList(0, 2), 2, 2); - Assertions.assertEquals("0010", builder.build().toString()); + Assertions.assertEquals("0010", builder.toString()); } @Test public void testEncode6() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerListEncoder.encode(builder, Arrays.asList(0, 3), 2, 2); - Assertions.assertEquals("0011", builder.build().toString()); + Assertions.assertEquals("0011", builder.toString()); } @Test public void testEncode7() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerListEncoder.encode(builder, Arrays.asList(1, 0), 2, 2); - Assertions.assertEquals("0100", builder.build().toString()); + Assertions.assertEquals("0100", builder.toString()); } @Test public void testEncode8() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerListEncoder.encode(builder, Arrays.asList(1, 1), 2, 2); - Assertions.assertEquals("0101", builder.build().toString()); + Assertions.assertEquals("0101", builder.toString()); } @Test public void testEncode9() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerListEncoder.encode(builder, Arrays.asList(1, 2), 2, 2); - Assertions.assertEquals("0110", builder.build().toString()); + Assertions.assertEquals("0110", builder.toString()); } @Test public void testEncode10() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerListEncoder.encode(builder, Arrays.asList(1, 3), 2, 2); - Assertions.assertEquals("0111", builder.build().toString()); + Assertions.assertEquals("0111", builder.toString()); } @Test public void testEncode11() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerListEncoder.encode(builder, Arrays.asList(2, 0), 2, 2); - Assertions.assertEquals("1000", builder.build().toString()); + Assertions.assertEquals("1000", builder.toString()); } @Test public void testEncode12() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerListEncoder.encode(builder, Arrays.asList(2, 1), 2, 2); - Assertions.assertEquals("1001", builder.build().toString()); + Assertions.assertEquals("1001", builder.toString()); } @Test public void testEncode13() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerListEncoder.encode(builder, Arrays.asList(2, 2), 2, 2); - Assertions.assertEquals("1010", builder.build().toString()); + Assertions.assertEquals("1010", builder.toString()); } @Test public void testEncode14() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerListEncoder.encode(builder, Arrays.asList(2, 3), 2, 2); - Assertions.assertEquals("1011", builder.build().toString()); + Assertions.assertEquals("1011", builder.toString()); } @Test public void testEncode15() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerListEncoder.encode(builder, Arrays.asList(3, 0), 2, 2); - Assertions.assertEquals("1100", builder.build().toString()); + Assertions.assertEquals("1100", builder.toString()); } @Test public void testEncode16() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerListEncoder.encode(builder, Arrays.asList(3, 1), 2, 2); - Assertions.assertEquals("1101", builder.build().toString()); + Assertions.assertEquals("1101", builder.toString()); } @Test public void testEncode17() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerListEncoder.encode(builder, Arrays.asList(3, 2), 2, 2); - Assertions.assertEquals("1110", builder.build().toString()); + Assertions.assertEquals("1110", builder.toString()); } @Test public void testEncode18() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerListEncoder.encode(builder, Arrays.asList(3, 3), 2, 2); - Assertions.assertEquals("1111", builder.build().toString()); + Assertions.assertEquals("1111", builder.toString()); } @Test public void testEncode19() { try { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerListEncoder.encode(builder, Arrays.asList(3, 3), 1, 1); Assertions.fail("EncodingException expected"); } catch (EncodingException e) { @@ -154,7 +152,7 @@ public void testEncode19() { private FixedIntegerList decode(String str) { EncodableFixedIntegerList encodable = new EncodableFixedIntegerList(2, 2); - encodable.decode(new BitStringReader(BitString.of(str))); + encodable.decode(BitString.of(str)); return encodable.getValue(); } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java index da47b3a5..bc9afb56 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java @@ -7,87 +7,85 @@ import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; public class FixedIntegerRangeEncoderTest { @Test public void testEncode1() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerRangeEncoder.encode(builder, new ArrayList<>()); - Assertions.assertEquals("000000000000", builder.build().toString()); + Assertions.assertEquals("000000000000", builder.toString()); } @Test public void testEncode2() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerRangeEncoder.encode(builder, Arrays.asList(2)); - Assertions.assertEquals("00000000000100000000000000010", builder.build().toString()); + Assertions.assertEquals("00000000000100000000000000010", builder.toString()); } @Test public void testEncode3() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerRangeEncoder.encode(builder, Arrays.asList(2, 3, 4, 5, 6)); Assertions.assertEquals("000000000001100000000000000100000000000000110", - builder.build().toString()); + builder.toString()); } @Test public void testEncode4() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerRangeEncoder.encode(builder, Arrays.asList(2, 5, 6, 7)); Assertions.assertEquals("00000000001000000000000000010100000000000001010000000000000111", - builder.build().toString()); + builder.toString()); } @Test public void testEncode5() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); IntegerSet set = new IntegerSet(); set.addAll(Arrays.asList(6, 7, 2, 5)); FixedIntegerRangeEncoder.encode(builder, set); Assertions.assertEquals("00000000001000000000000000010100000000000001010000000000000111", - builder.build().toString()); + builder.toString()); } @Test public void testEncode6() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerRangeEncoder.encode(builder, Arrays.asList(3, 5, 6, 7, 8)); Assertions.assertEquals("00000000001000000000000000011100000000000001010000000000001000", - builder.build().toString()); + builder.toString()); } @Test public void testEncode7() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerRangeEncoder.encode(builder, Arrays.asList(12, 24, 48)); Assertions.assertEquals("000000000011000000000000011000000000000001100000000000000110000", - builder.build().toString()); + builder.toString()); } @Test public void testEncode8() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerRangeEncoder.encode(builder, Arrays.asList(12, 24, 48, 49)); Assertions.assertEquals("0000000000110000000000000110000000000000011000100000000001100000000000000110001", - builder.build().toString()); + builder.toString()); } @Test public void testEncode9() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerRangeEncoder.encode(builder, Arrays.asList(2, 6, 8, 12, 18, 23, 24, 25, 37, 42)); Assertions.assertEquals( "00000000100000000000000000010000000000000001100000000000000100000000000000001100000000000000100101000000000001011100000000000110010000000000010010100000000000101010", - builder.build().toString()); + builder.toString()); } private IntegerSet decode(String str) { - return FixedIntegerRangeEncoder.decode(new BitStringReader(BitString.of(str))); + return FixedIntegerRangeEncoder.decode(BitString.of(str)); } @Test diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoderTest.java index fc1fde0a..e7063ded 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoderTest.java @@ -4,8 +4,6 @@ import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -13,51 +11,51 @@ public class FixedLongEncoderTest { @Test public void testEncode1() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedLongEncoder.encode(builder, 0, 1); - Assertions.assertEquals("0", builder.build().toString()); + Assertions.assertEquals("0", builder.toString()); } @Test public void testEncode2() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedLongEncoder.encode(builder, 0, 6); - Assertions.assertEquals("000000", builder.build().toString()); + Assertions.assertEquals("000000", builder.toString()); } @Test public void testEncode3() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedLongEncoder.encode(builder, 1, 1); - Assertions.assertEquals("1", builder.build().toString()); + Assertions.assertEquals("1", builder.toString()); } @Test public void testEncode4() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedLongEncoder.encode(builder, 1, 4); - Assertions.assertEquals("0001", builder.build().toString()); + Assertions.assertEquals("0001", builder.toString()); } @Test public void testEncode5() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedLongEncoder.encode(builder, 7, 8); - Assertions.assertEquals("00000111", builder.build().toString()); + Assertions.assertEquals("00000111", builder.toString()); } @Test public void testEncode6() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedLongEncoder.encode(builder, 16630898421L, 36); - Assertions.assertEquals("001111011111010001110101111011110101", builder.build().toString()); + Assertions.assertEquals("001111011111010001110101111011110101", builder.toString()); } @Test public void testEncode7() { try { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerEncoder.encode(builder, 8, 1); Assertions.fail("EncodingException expected"); } catch (EncodingException e) { @@ -66,7 +64,7 @@ public void testEncode7() { } private long decode(String str) { - return new BitStringReader(BitString.of(str)).readLong(str.length()); + return BitString.of(str).readLong(str.length()); } @Test diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoderTest.java index 970c99bc..9a5c9340 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoderTest.java @@ -4,8 +4,6 @@ import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -13,22 +11,22 @@ public class FixedStringEncoderTest { @Test public void testEncode1() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedStringEncoder.encode(builder, "AB", 2); - Assertions.assertEquals("000000000001", builder.build().toString()); + Assertions.assertEquals("000000000001", builder.toString()); } @Test public void testEncode2() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedStringEncoder.encode(builder, "a", 2); - Assertions.assertEquals("100000111111", builder.build().toString()); + Assertions.assertEquals("100000111111", builder.toString()); } @Test public void testEncode3() { try { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedStringEncoder.encode(builder, "1", 2); Assertions.fail("DecodingException expected"); } catch (EncodingException e) { @@ -37,7 +35,7 @@ public void testEncode3() { } private String decode(String str) { - return FixedStringEncoder.decode(new BitStringReader(BitString.of(str)), str.length() / 6); + return FixedStringEncoder.decode(BitString.of(str), str.length() / 6); } @Test From 2b17dddd78b3d472196a240fef1c012a2745d60d Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 3 Feb 2026 13:04:23 -0500 Subject: [PATCH 55/86] remove redundant code --- .../base64/AbstractBase64UrlEncoder.java | 10 +---- .../iab/gpp/encoder/bitstring/BitString.java | 29 +++++++++----- .../datatype/encoder/BooleanEncoder.java | 12 ------ .../datatype/encoder/FixedIntegerEncoder.java | 34 ---------------- .../datatype/encoder/FixedLongEncoder.java | 14 ------- .../datatype/encoder/BooleanEncoderTest.java | 40 ++----------------- 6 files changed, 26 insertions(+), 113 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java index 8dfa2d73..fba340f7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java @@ -3,7 +3,6 @@ import java.util.Arrays; import com.iab.gpp.encoder.bitstring.BitSet; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -35,19 +34,14 @@ public StringBuilder encode(BitString bitString) { pad(bitString); int length = bitString.length(); StringBuilder str = new StringBuilder(length / BASE64_BITS); - - int index = 0; - while (index <= length - BASE64_BITS) { + while (bitString.hasRemaining()) { try { - int nextIndex = index + BASE64_BITS; - int n = FixedIntegerEncoder.decode(bitString, index, nextIndex); + int n = bitString.readInt(BASE64_BITS); str.append(DICT.charAt(n)); - index = nextIndex; } catch (DecodingException e) { throw new EncodingException("Unencodable Base64Url '" + bitString + "'"); } } - return str; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java index c18da6c3..f9bbaed0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java @@ -2,8 +2,6 @@ import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.datatype.encoder.FibonacciIntegerEncoder; -import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; -import com.iab.gpp.encoder.datatype.encoder.FixedLongEncoder; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; @@ -52,7 +50,7 @@ public String toString() { return sb.toString(); } - public boolean getValue(int i) { + private boolean getValue(int i) { if (i >= writeIndex) { throw new DecodingException("Bit string access out of range"); } @@ -63,6 +61,9 @@ public int length() { return writeIndex; } + public boolean hasRemaining() { + return readIndex < writeIndex; + } public BitString extend(int length) { this.writeIndex += length; @@ -93,16 +94,26 @@ public BitString append(BitString other) { } public int readInt(int length) { - int newReadIndex = readIndex + length; - int out = FixedIntegerEncoder.decode(this, readIndex, newReadIndex); - readIndex = newReadIndex; + int out = 0; + int mask = 1 << length; + for (int i = 0; i < length; i++) { + mask >>= 1; + if (readBool()) { + out |= mask; + } + } return out; } public long readLong(int length) { - int newReadIndex = readIndex + length; - long out = FixedLongEncoder.decode(this, readIndex, newReadIndex); - readIndex = newReadIndex; + long out = 0; + long mask = 1L << length; + for (int i = 0; i < length; i++) { + mask >>= 1; + if (readBool()) { + out |= mask; + } + } return out; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoder.java index c3d07392..ee39fdcb 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoder.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.datatype.encoder; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; public class BooleanEncoder { @@ -12,15 +11,4 @@ public static void encode(BitString builder, Boolean value) { } builder.append(value); } - - public static boolean decode(BitString bitString) { - return decode(bitString, 0, bitString.length()); - } - - public static boolean decode(BitString bitString, int fromIndex, int length) { - if (length != 1) { - throw new DecodingException("Undecodable Boolean '" + bitString + "'"); - } - return bitString.getValue(fromIndex); - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoder.java index 85b0cd82..cf009a03 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoder.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.datatype.encoder; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; public class FixedIntegerEncoder { @@ -18,37 +17,4 @@ public static void encode(BitString builder, int value, int bitStringLength) { builder.append((value & mask) > 0); } } - - public static int decode(BitString bitString) throws DecodingException { - return decode(bitString, 0, bitString.length()); - } - - public static int decode(BitString bitString, int from, int to) throws DecodingException { - int value = 0; - - int length = to - from; - for (int i = 0; i < length; i++) { - if (bitString.getValue(to - (i + 1))) { - value += 1 << i; - } - } - - return value; - } - - public static int decode(String bitString, int fromIndex, int length) throws DecodingException { - int value = 0; - - int base = fromIndex + length - 1; - for (int i = 0; i < length; i++) { - char c = bitString.charAt(base - i); - if (c == BitString.TRUE) { - value += 1 << i; - } else if (c != BitString.FALSE) { - throw new DecodingException("Unencodable Base64Url '" + bitString + "'"); - } - } - - return value; - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoder.java index bc326030..05d79502 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoder.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.datatype.encoder; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; public class FixedLongEncoder { @@ -18,17 +17,4 @@ public static void encode(BitString builder, long value, int bitStringLength) { builder.append((value & mask) > 0); } } - - public static long decode(BitString bitString, int from, int to) throws DecodingException { - long value = 0; - - int length = to - from; - for (int i = 0; i < length; i++) { - if (bitString.getValue(to - (i + 1))) { - value += 1L << i; - } - } - - return value; - } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoderTest.java index b3fda6c2..9e132116 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoderTest.java @@ -24,20 +24,18 @@ public void testEncode2() { @Test public void testDecode1() { - BitString x = BitString.of("0"); - System.out.println(x); - Assertions.assertEquals(false, BooleanEncoder.decode(x)); + Assertions.assertEquals(false, BitString.of("0").readBool()); } @Test public void testDecode2() { - Assertions.assertEquals(true, BooleanEncoder.decode(BitString.of("1"))); + Assertions.assertEquals(true, BitString.of("1").readBool()); } @Test public void testDecode3() { try { - BooleanEncoder.decode(BitString.of("")); + BitString.of("").readBool(); Assertions.fail("DecodingException expected"); } catch (DecodingException e) { @@ -47,37 +45,7 @@ public void testDecode3() { @Test public void testDecode4() { try { - BooleanEncoder.decode(BitString.of("2")); - Assertions.fail("DecodingException expected"); - } catch (DecodingException e) { - - } - } - - @Test - public void testDecode5() { - try { - BooleanEncoder.decode(BitString.of("00")); - Assertions.fail("DecodingException expected"); - } catch (DecodingException e) { - - } - } - - @Test - public void testDecode6() { - try { - BooleanEncoder.decode(BitString.of("01")); - Assertions.fail("DecodingException expected"); - } catch (DecodingException e) { - - } - } - - @Test - public void testDecode7() { - try { - BooleanEncoder.decode(BitString.of("10")); + BitString.of("2").readBool(); Assertions.fail("DecodingException expected"); } catch (DecodingException e) { From b78569311d0311b9c83b6a34d1a39ebe38cc5545 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 3 Feb 2026 13:27:48 -0500 Subject: [PATCH 56/86] consolidate and rename read/write methods --- .../base64/CompressedBase64UrlEncoder.java | 4 +- .../base64/TraditionalBase64UrlEncoder.java | 2 +- .../iab/gpp/encoder/bitstring/BitString.java | 84 ++++++++++++++----- .../EncodableArrayOfFixedIntegerRanges.java | 7 +- .../encoder/datatype/EncodableBoolean.java | 5 +- .../datatype/EncodableFibonacciInteger.java | 3 +- .../datatype/EncodableFixedInteger.java | 3 +- .../encoder/datatype/FixedIntegerList.java | 2 +- .../datatype/encoder/BooleanEncoder.java | 14 ---- .../datatype/encoder/DatetimeEncoder.java | 4 +- .../encoder/FibonacciIntegerEncoder.java | 29 ------- .../encoder/FibonacciIntegerRangeEncoder.java | 16 ++-- .../encoder/FixedBitfieldEncoder.java | 2 +- .../datatype/encoder/FixedIntegerEncoder.java | 20 ----- .../encoder/FixedIntegerListEncoder.java | 4 +- .../encoder/FixedIntegerRangeEncoder.java | 16 ++-- .../datatype/encoder/FixedLongEncoder.java | 20 ----- .../datatype/encoder/FixedStringEncoder.java | 4 +- .../encoder/OptimizedFixedRangeEncoder.java | 13 +-- .../gpp/encoder/segment/UsNatCoreSegment.java | 10 +-- .../datatype/encoder/BooleanEncoderTest.java | 12 +-- .../encoder/FibonacciIntegerEncoderTest.java | 16 ++-- .../encoder/FixedIntegerEncoderTest.java | 12 +-- .../encoder/FixedLongEncoderTest.java | 14 ++-- 24 files changed, 138 insertions(+), 178 deletions(-) delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoder.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoder.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoder.java diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/CompressedBase64UrlEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/CompressedBase64UrlEncoder.java index c890b722..b4527851 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/CompressedBase64UrlEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/CompressedBase64UrlEncoder.java @@ -20,7 +20,7 @@ protected void pad(BitString bitString) { if(remainder > 0) { int padding = 8 - remainder; for (int i = 0; i < padding; i++) { - bitString.append(false); + bitString.writeBoolean(false); } } @@ -28,7 +28,7 @@ protected void pad(BitString bitString) { if(remainder > 0) { int padding = 6 - remainder; for (int i = 0; i < padding; i++) { - bitString.append(false); + bitString.writeBoolean(false); } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoder.java index 043d5bb1..d26e71cf 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoder.java @@ -20,7 +20,7 @@ protected void pad(BitString bitString) { if (remainder > 0) { int padding = 24 - remainder; for (int i = 0; i < padding; i++) { - bitString.append(false); + bitString.writeBoolean(false); } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java index f9bbaed0..00d20809 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java @@ -4,6 +4,7 @@ import com.iab.gpp.encoder.datatype.encoder.FibonacciIntegerEncoder; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; +import com.iab.gpp.encoder.error.EncodingException; public final class BitString { public static final char TRUE = '1'; @@ -26,14 +27,13 @@ public BitString() { public static final BitString of(String str) { int length = str.length(); - BitString out = new BitString(new BitSet(length), 0); for (int i = 0; i < length; i++) { char c = str.charAt(i); if (c == TRUE) { - out.append(true); + out.writeBoolean(true); } else if (c == FALSE) { - out.append(false); + out.writeBoolean(false); } else { throw new DecodingException("Invalid bit string"); } @@ -60,45 +60,91 @@ private boolean getValue(int i) { public int length() { return writeIndex; } - + public boolean hasRemaining() { return readIndex < writeIndex; } - - public BitString extend(int length) { + + public void writeEmpty(int length) { this.writeIndex += length; - return this; } - public BitString append(boolean value) { + public void writeInt(int value, int length) { + int mask = 1 << length; + if (value >= mask) { + throw new EncodingException( + "Numeric value '" + value + "' is too large for a bit string length of '" + length + "'"); + } + for (int i = 0; i < length; i++) { + mask >>= 1; + writeBoolean((mask & value) != 0); + } + } + + public void writeLong(long value, int length) { + long mask = 1L << length; + if (value >= mask) { + throw new EncodingException( + "Numeric value '" + value + "' is too large for a bit string length of '" + length + "'"); + } + for (int i = 0; i < length; i++) { + mask >>= 1; + writeBoolean((mask & value) != 0); + } + } + + public void writeBoolean(boolean value) { int idx = writeIndex++; if (value) { bitSet.set(idx); } - return this; } - public BitString append(BitString other, int from, int to) { + public void writeFibonacci(int value) { + int largestIndex = 0; + for (int i = 0; i < FibonacciIntegerEncoder.FIBONACCI_LIMIT; i++) { + if (value >= FibonacciIntegerEncoder.FIBONACCI_NUMBERS[i]) { + largestIndex++; + } else { + break; + } + } + if (largestIndex == FibonacciIntegerEncoder.FIBONACCI_LIMIT) { + throw new EncodingException("Unencodable FibonacciInteger " + value); + } + + int out = 1; + int mask = 1; + for (int i = largestIndex - 1; i >= 0; i--) { + mask <<= 1; + int f = FibonacciIntegerEncoder.FIBONACCI_NUMBERS[i]; + if (value >= f) { + out |= mask; + value -= f; + } + } + writeInt(out, largestIndex + 1); + } + + public void write(BitString other, int from, int to) { for (int i = from; i < to; i++) { - append(other.getValue(i)); + writeBoolean(other.getValue(i)); } - return this; } - public BitString append(BitString other) { + public void write(BitString other) { int otherLength = other.length(); for (int i = 0; i < otherLength; i++) { - append(other.bitSet.get(i)); + writeBoolean(other.bitSet.get(i)); } - return this; } - + public int readInt(int length) { int out = 0; int mask = 1 << length; for (int i = 0; i < length; i++) { mask >>= 1; - if (readBool()) { + if (readBoolean()) { out |= mask; } } @@ -110,14 +156,14 @@ public long readLong(int length) { long mask = 1L << length; for (int i = 0; i < length; i++) { mask >>= 1; - if (readBool()) { + if (readBoolean()) { out |= mask; } } return out; } - public boolean readBool() { + public boolean readBoolean() { return getValue(readIndex++); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java index 17553644..b0ed304a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java @@ -2,7 +2,6 @@ import java.util.List; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerRangeEncoder; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; @@ -25,10 +24,10 @@ public void encode(BitString sb) { try { List entries = this.value; - FixedIntegerEncoder.encode(sb, entries.size(), 12); + sb.writeInt(entries.size(), 12); for (RangeEntry entry : entries) { - FixedIntegerEncoder.encode(sb, entry.getKey(), keyBitStringLength); - FixedIntegerEncoder.encode(sb, entry.getType(), typeBitStringLength); + sb.writeInt(entry.getKey(), keyBitStringLength); + sb.writeInt(entry.getType(), typeBitStringLength); FixedIntegerRangeEncoder.encode(sb, entry.getIds()); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java index 98149f47..1bfa4f19 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.datatype; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.datatype.encoder.BooleanEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -14,7 +13,7 @@ public EncodableBoolean(Boolean value) { public void encode(BitString builder){ try { - BooleanEncoder.encode(builder, this.value); + builder.writeBoolean(this.value); } catch (Exception e) { throw new EncodingException(e); } @@ -22,7 +21,7 @@ public void encode(BitString builder){ public void decode(BitString reader) { try { - this.value = reader.readBool(); + this.value = reader.readBoolean(); } catch (Exception e) { throw new DecodingException(e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java index 4e423d38..f4dacdb1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.datatype; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.datatype.encoder.FibonacciIntegerEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -23,7 +22,7 @@ public EncodableFibonacciInteger(Integer value, boolean hardFailIfMissing) { public void encode(BitString builder) { try { - FibonacciIntegerEncoder.encode(builder, this.value); + builder.writeFibonacci(this.value); } catch (Exception e) { throw new EncodingException(e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java index 3896c068..c7c3c87a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.datatype; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -22,7 +21,7 @@ public EncodableFixedInteger(int bitStringLength, Integer value) { public void encode(BitString builder) { try { - FixedIntegerEncoder.encode(builder, this.value, this.bitStringLength); + builder.writeInt(this.value, this.bitStringLength); } catch (Exception e) { throw new EncodingException(e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java index ec917964..9c49bc50 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java @@ -68,7 +68,7 @@ public int setInt(int index, int value) { int to = from + length; for (int i = from; i < to; i++) { mask >>= 1; - if (bitSet.set(i, (value & mask) > 0)) { + if (bitSet.set(i, (value & mask) != 0)) { value |= mask; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoder.java deleted file mode 100644 index ee39fdcb..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoder.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.iab.gpp.encoder.datatype.encoder; - -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.error.EncodingException; - -public class BooleanEncoder { - private BooleanEncoder() {} - public static void encode(BitString builder, Boolean value) { - if (value == null) { - throw new EncodingException("Unencodable Boolean '" + value + "'"); - } - builder.append(value); - } -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java index c7e8c764..b8a741b8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java @@ -10,9 +10,9 @@ private DatetimeEncoder() {} public static void encode(BitString builder, Instant value) { if (value != null) { - FixedLongEncoder.encode(builder, value.toEpochMilli() / 100, 36); + builder.writeLong(value.toEpochMilli() / 100, 36); } else { - FixedLongEncoder.encode(builder, 0, 36); + builder.writeLong(0, 36); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java index 0e0c6579..d83c35f9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java @@ -1,8 +1,5 @@ package com.iab.gpp.encoder.datatype.encoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.error.EncodingException; - public class FibonacciIntegerEncoder { private FibonacciIntegerEncoder() {} @@ -21,30 +18,4 @@ private FibonacciIntegerEncoder() {} } } } - - public static void encode(BitString builder, int value) { - int largestIndex = 0; - for (int i = 0; i < FIBONACCI_LIMIT; i++) { - if (value >= FIBONACCI_NUMBERS[i]) { - largestIndex++; - } else { - break; - } - } - if (largestIndex == FIBONACCI_LIMIT) { - throw new EncodingException("Unencodable FibonacciInteger " + value); - } - - int out = 1; - int mask = 1; - for (int i = largestIndex - 1; i >= 0; i--) { - mask <<= 1; - int f = FIBONACCI_NUMBERS[i]; - if (value >= f) { - out |= mask; - value -= f; - } - } - FixedIntegerEncoder.encode(builder, out, largestIndex + 1); - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java index 81829415..addce7a1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java @@ -28,8 +28,8 @@ public static int encode(BitString builder, Collection value) { groupCount++; writeGroup(rangeBuilder, groupStart, last, offset); } - FixedIntegerEncoder.encode(builder,groupCount, 12); - builder.append(rangeBuilder); + builder.writeInt(groupCount, 12); + builder.write(rangeBuilder); return last; } @@ -37,12 +37,12 @@ private static void writeGroup(BitString builder, int groupStart, int last, int int base = groupStart - offset; int span = last - groupStart; if (span == 0) { - builder.append(false); - FibonacciIntegerEncoder.encode(builder, base); + builder.writeBoolean(false); + builder.writeFibonacci(base); } else { - builder.append(true); - FibonacciIntegerEncoder.encode(builder, base); - FibonacciIntegerEncoder.encode(builder, span); + builder.writeBoolean(true); + builder.writeFibonacci(base); + builder.writeFibonacci(span); } } @@ -51,7 +51,7 @@ public static IntegerSet decode(BitString reader) throws DecodingException { IntegerSet value = new IntegerSet(); int offset = 0; for (int i = 0; i < count; i++) { - boolean group = reader.readBool(); + boolean group = reader.readBoolean(); if (group) { int start = reader.readFibonacci() + offset; offset = start; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java index 2f649ab0..c65a864a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java @@ -7,7 +7,7 @@ private FixedBitfieldEncoder() {} public static void encode(BitString builder, IntegerSet value, int bitStringLength) { for (int i = 0; i < bitStringLength; i++) { - BooleanEncoder.encode(builder, value.containsInt(i)); + builder.writeBoolean(value.containsInt(i)); } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoder.java deleted file mode 100644 index cf009a03..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoder.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.iab.gpp.encoder.datatype.encoder; - -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.error.EncodingException; - -public class FixedIntegerEncoder { - private FixedIntegerEncoder() {} - - public static void encode(BitString builder, int value, int bitStringLength) { - int mask = 1 << bitStringLength; - if (value >= mask) { - throw new EncodingException( - "Numeric value '" + value + "' is too large for a bit string length of '" + bitStringLength + "'"); - } - for (int i = 0; i < bitStringLength; i++) { - mask >>= 1; - builder.append((value & mask) > 0); - } - } -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java index 647ad51f..cfdc431c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java @@ -15,10 +15,10 @@ public static void encode(BitString builder, List value, int elementBit for (int i = 0; i < numElements; i++) { if (i < length) { - FixedIntegerEncoder.encode(builder, value.get(i), elementBitStringLength); + builder.writeInt(value.get(i), elementBitStringLength); } else { for (int j = 0; j < elementBitStringLength; j++) { - builder.append(false); + builder.writeBoolean(false); } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java index 9016674c..db32fca2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java @@ -26,19 +26,19 @@ public static int encode(BitString builder, Collection value) { groupCount++; writeGroup(rangeBuilder, groupStart, last); } - FixedIntegerEncoder.encode(builder, groupCount, 12); - builder.append(rangeBuilder); + builder.writeInt(groupCount, 12); + builder.write(rangeBuilder); return last; } private static void writeGroup(BitString builder, int groupStart, int last) { if (groupStart == last) { - builder.append(false); - FixedIntegerEncoder.encode(builder, groupStart, 16); + builder.writeBoolean(false); + builder.writeInt(groupStart, 16); } else { - builder.append(true); - FixedIntegerEncoder.encode(builder, groupStart, 16); - FixedIntegerEncoder.encode(builder, last, 16); + builder.writeBoolean(true); + builder.writeInt(groupStart, 16); + builder.writeInt(last, 16); } } @@ -46,7 +46,7 @@ public static IntegerSet decode(BitString reader) throws DecodingException { int count = reader.readInt(12); IntegerSet value = new IntegerSet(); for (int i = 0; i < count; i++) { - boolean group = reader.readBool(); + boolean group = reader.readBoolean(); if (group) { int start = reader.readInt(16); int end = reader.readInt(16); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoder.java deleted file mode 100644 index 05d79502..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoder.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.iab.gpp.encoder.datatype.encoder; - -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.error.EncodingException; - -public class FixedLongEncoder { - private FixedLongEncoder() {} - - public static void encode(BitString builder, long value, int bitStringLength) { - long mask = 1L << bitStringLength; - if (value >= mask) { - throw new EncodingException( - "Numeric value '" + value + "' is too large for a bit string length of '" + bitStringLength + "'"); - } - for (int i = 0; i < bitStringLength; i++) { - mask >>= 1; - builder.append((value & mask) > 0); - } - } -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java index 9587baf8..39fd4001 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java @@ -15,9 +15,9 @@ public static void encode(BitString builder, String value, int stringLength) { code = value.charAt(i); } if (code == SPACE) { - FixedIntegerEncoder.encode(builder, 63, 6); + builder.writeInt(63, 6); } else if (code >= 65) { - FixedIntegerEncoder.encode(builder, ((int) value.charAt(i)) - 65, 6); + builder.writeInt(((int) value.charAt(i)) - 65, 6); } else { throw new EncodingException("Unencodable FixedString '" + value + "'"); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java index 3a89e381..d32cc412 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java @@ -15,20 +15,21 @@ public static void encode(BitString builder, IntegerSet value) throws EncodingEx int bitFieldLength = max; if (rangeLength <= bitFieldLength) { - FixedIntegerEncoder.encode(builder, max, 16); - builder.append(true).append(rangeBitString); + builder.writeInt(max, 16); + builder.writeBoolean(true); + builder.write(rangeBitString); } else { - FixedIntegerEncoder.encode(builder, max, 16); - builder.append(false); + builder.writeInt(max, 16); + builder.writeBoolean(false); for (int i = 0; i < max; i++) { - builder.append(value.containsInt(i + 1)); + builder.writeBoolean(value.containsInt(i + 1)); } } } public static IntegerSet decode(BitString reader) throws DecodingException { int size = reader.readInt(16); - if (reader.readBool()) { + if (reader.readBoolean()) { return FixedIntegerRangeEncoder.decode(reader); } else { return reader.readIntegerSet(size); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java index 369c25bb..442fb138 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java @@ -53,11 +53,11 @@ protected BitString decodeBitString(CharSequence encodedString) { if (bitString.length() == 66) { BitString builder = new BitString(); - builder.append(bitString, 0, 48); - builder.extend(8); - builder.append(bitString, 48, 52); - builder.extend(2); - builder.append(bitString, 52, 62); + builder.write(bitString, 0, 48); + builder.writeEmpty(8); + builder.write(bitString, 48, 52); + builder.writeEmpty(2); + builder.write(bitString, 52, 62); bitString = builder; } return bitString; diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoderTest.java index 9e132116..d755cb51 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoderTest.java @@ -11,31 +11,31 @@ public class BooleanEncoderTest { @Test public void testEncode1() { BitString builder = new BitString(); - BooleanEncoder.encode(builder, false); + builder.writeBoolean(false); Assertions.assertEquals("0", builder.toString()); } @Test public void testEncode2() { BitString builder = new BitString(); - BooleanEncoder.encode(builder, true); + builder.writeBoolean(true); Assertions.assertEquals("1", builder.toString()); } @Test public void testDecode1() { - Assertions.assertEquals(false, BitString.of("0").readBool()); + Assertions.assertEquals(false, BitString.of("0").readBoolean()); } @Test public void testDecode2() { - Assertions.assertEquals(true, BitString.of("1").readBool()); + Assertions.assertEquals(true, BitString.of("1").readBoolean()); } @Test public void testDecode3() { try { - BitString.of("").readBool(); + BitString.of("").readBoolean(); Assertions.fail("DecodingException expected"); } catch (DecodingException e) { @@ -45,7 +45,7 @@ public void testDecode3() { @Test public void testDecode4() { try { - BitString.of("2").readBool(); + BitString.of("2").readBoolean(); Assertions.fail("DecodingException expected"); } catch (DecodingException e) { diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java index f2e5c394..103e7545 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java @@ -12,49 +12,49 @@ public class FibonacciIntegerEncoderTest { @Test public void testEncode1() { BitString builder = new BitString(); - FibonacciIntegerEncoder.encode(builder, 1); + builder.writeFibonacci(1); Assertions.assertEquals("11", builder.toString()); } @Test public void testEncode2() { BitString builder = new BitString(); - FibonacciIntegerEncoder.encode(builder, 2); + builder.writeFibonacci(2); Assertions.assertEquals("011", builder.toString()); } @Test public void testEncode3() { BitString builder = new BitString(); - FibonacciIntegerEncoder.encode(builder, 3); + builder.writeFibonacci(3); Assertions.assertEquals("0011", builder.toString()); } @Test public void testEncode4() { BitString builder = new BitString(); - FibonacciIntegerEncoder.encode(builder, 4); + builder.writeFibonacci(4); Assertions.assertEquals("1011", builder.toString()); } @Test public void testEncode5() { BitString builder = new BitString(); - FibonacciIntegerEncoder.encode(builder, 5); + builder.writeFibonacci(5); Assertions.assertEquals("00011", builder.toString()); } @Test public void testEncode6() { BitString builder = new BitString(); - FibonacciIntegerEncoder.encode(builder, 6); + builder.writeFibonacci(6); Assertions.assertEquals("10011", builder.toString()); } @Test public void testEncode7() { BitString builder = new BitString(); - FibonacciIntegerEncoder.encode(builder, 7); + builder.writeFibonacci(7); Assertions.assertEquals("01011", builder.toString()); } @@ -62,7 +62,7 @@ public void testEncode7() { public void testEncodeTooLarge() { BitString builder = new BitString(); Assertions.assertThrows(EncodingException.class, () -> - FibonacciIntegerEncoder.encode(builder, Integer.MAX_VALUE)); + builder.writeFibonacci(Integer.MAX_VALUE)); } private int decode(String str) { diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoderTest.java index bde7eb8b..82c44343 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoderTest.java @@ -12,35 +12,35 @@ public class FixedIntegerEncoderTest { @Test public void testEncode1() { BitString builder = new BitString(); - FixedIntegerEncoder.encode(builder, 0, 1); + builder.writeInt(0, 1); Assertions.assertEquals("0", builder.toString()); } @Test public void testEncode2() { BitString builder = new BitString(); - FixedIntegerEncoder.encode(builder, 0, 6); + builder.writeInt(0, 6); Assertions.assertEquals("000000", builder.toString()); } @Test public void testEncode3() { BitString builder = new BitString(); - FixedIntegerEncoder.encode(builder, 1, 1); + builder.writeInt(1, 1); Assertions.assertEquals("1", builder.toString()); } @Test public void testEncode4() { BitString builder = new BitString(); - FixedIntegerEncoder.encode(builder, 1, 4); + builder.writeInt(1, 4); Assertions.assertEquals("0001", builder.toString()); } @Test public void testEncode5() { BitString builder = new BitString(); - FixedIntegerEncoder.encode(builder, 7, 8); + builder.writeInt(7, 8); Assertions.assertEquals("00000111", builder.toString()); } @@ -48,7 +48,7 @@ public void testEncode5() { public void testEncode6() { try { BitString builder = new BitString(); - FixedIntegerEncoder.encode(builder, 8, 1); + builder.writeInt(8, 1); Assertions.fail("EncodingException expected"); } catch (EncodingException e) { diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoderTest.java index e7063ded..0b1e9411 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoderTest.java @@ -12,35 +12,35 @@ public class FixedLongEncoderTest { @Test public void testEncode1() { BitString builder = new BitString(); - FixedLongEncoder.encode(builder, 0, 1); + builder.writeLong(0, 1); Assertions.assertEquals("0", builder.toString()); } @Test public void testEncode2() { BitString builder = new BitString(); - FixedLongEncoder.encode(builder, 0, 6); + builder.writeLong(0, 6); Assertions.assertEquals("000000", builder.toString()); } @Test public void testEncode3() { BitString builder = new BitString(); - FixedLongEncoder.encode(builder, 1, 1); + builder.writeLong(1, 1); Assertions.assertEquals("1", builder.toString()); } @Test public void testEncode4() { BitString builder = new BitString(); - FixedLongEncoder.encode(builder, 1, 4); + builder.writeLong(1, 4); Assertions.assertEquals("0001", builder.toString()); } @Test public void testEncode5() { BitString builder = new BitString(); - FixedLongEncoder.encode(builder, 7, 8); + builder.writeLong(7, 8); Assertions.assertEquals("00000111", builder.toString()); } @@ -48,7 +48,7 @@ public void testEncode5() { @Test public void testEncode6() { BitString builder = new BitString(); - FixedLongEncoder.encode(builder, 16630898421L, 36); + builder.writeLong(16630898421L, 36); Assertions.assertEquals("001111011111010001110101111011110101", builder.toString()); } @@ -56,7 +56,7 @@ public void testEncode6() { public void testEncode7() { try { BitString builder = new BitString(); - FixedIntegerEncoder.encode(builder, 8, 1); + builder.writeInt(8, 1); Assertions.fail("EncodingException expected"); } catch (EncodingException e) { From c835146816b71242875fc9fba80e5fb28207487e Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 3 Feb 2026 13:29:11 -0500 Subject: [PATCH 57/86] fix packages --- .../main/java/com/iab/gpp/encoder/bitstring/BitString.java | 2 +- .../encoder/datatype/AbstractDirtyableBitStringDataType.java | 2 -- .../src/main/java/com/iab/gpp/encoder/datatype/DataType.java | 2 -- .../com/iab/gpp/encoder/datatype/{encoder => }/Dirtyable.java | 2 +- .../main/java/com/iab/gpp/encoder/datatype/DirtyableList.java | 1 - .../encoder/datatype/EncodableArrayOfFixedIntegerRanges.java | 1 - .../gpp/encoder/datatype/EncodableFibonacciIntegerRange.java | 1 - .../com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java | 1 - .../com/iab/gpp/encoder/datatype/EncodableFixedInteger.java | 2 +- .../iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java | 1 - .../iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java | 1 - .../gpp/encoder/datatype/EncodableOptimizedFixedRange.java | 1 - .../java/com/iab/gpp/encoder/datatype/FixedIntegerList.java | 1 - .../iab/gpp/encoder/datatype/{encoder => }/IntegerCache.java | 4 ++-- .../iab/gpp/encoder/datatype/{encoder => }/IntegerSet.java | 2 +- .../main/java/com/iab/gpp/encoder/datatype/RangeEntry.java | 2 -- .../datatype/encoder/FibonacciIntegerRangeEncoder.java | 1 + .../gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java | 1 + .../encoder/datatype/encoder/FixedIntegerRangeEncoder.java | 1 + .../encoder/datatype/encoder/OptimizedFixedRangeEncoder.java | 1 + .../java/com/iab/gpp/encoder/section/AbstractEncodable.java | 2 +- .../src/main/java/com/iab/gpp/encoder/section/HeaderV1.java | 2 +- .../src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java | 2 +- .../src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java | 2 +- .../datatype/encoder/FibonacciIntegerRangeEncoderTest.java | 1 + .../encoder/datatype/encoder/FixedBitfieldEncoderTest.java | 1 + .../datatype/encoder/FixedIntegerRangeEncoderTest.java | 1 + .../com/iab/gpp/encoder/datatype/encoder/IntegerSetTest.java | 1 + .../test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java | 2 +- 29 files changed, 19 insertions(+), 25 deletions(-) rename iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/{encoder => }/Dirtyable.java (64%) rename iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/{encoder => }/IntegerCache.java (73%) rename iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/{encoder => }/IntegerSet.java (99%) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java index 00d20809..4aba4d17 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java @@ -1,8 +1,8 @@ package com.iab.gpp.encoder.bitstring; import com.iab.gpp.encoder.datatype.FixedIntegerList; +import com.iab.gpp.encoder.datatype.IntegerSet; import com.iab.gpp.encoder.datatype.encoder.FibonacciIntegerEncoder; -import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java index 6c6adcb4..bd2c0ed7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java @@ -1,7 +1,5 @@ package com.iab.gpp.encoder.datatype; -import com.iab.gpp.encoder.datatype.encoder.Dirtyable; - // This class is used to handle collection types. // It is important that we monitor the collections we return for changes. public abstract class AbstractDirtyableBitStringDataType diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java index 158ef48b..731be014 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java @@ -1,7 +1,5 @@ package com.iab.gpp.encoder.datatype; -import com.iab.gpp.encoder.datatype.encoder.Dirtyable; - public abstract class DataType implements Dirtyable { public abstract boolean hasValue(); public abstract T getValue(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/Dirtyable.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/Dirtyable.java similarity index 64% rename from iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/Dirtyable.java rename to iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/Dirtyable.java index 2353de1d..ad15093c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/Dirtyable.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/Dirtyable.java @@ -1,4 +1,4 @@ -package com.iab.gpp.encoder.datatype.encoder; +package com.iab.gpp.encoder.datatype; public interface Dirtyable { boolean isDirty(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DirtyableList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DirtyableList.java index dffbb74d..93ca3841 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DirtyableList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DirtyableList.java @@ -3,7 +3,6 @@ import java.util.AbstractList; import java.util.ArrayList; import java.util.Collection; -import com.iab.gpp.encoder.datatype.encoder.Dirtyable; // This class tracks whether a list has been modified. final class DirtyableList extends AbstractList implements Dirtyable { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java index b0ed304a..9f18f835 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java @@ -3,7 +3,6 @@ import java.util.List; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerRangeEncoder; -import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java index 8f69fc2e..e66c2137 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java @@ -3,7 +3,6 @@ import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FibonacciIntegerRangeEncoder; -import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java index a5281426..18f28806 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java @@ -3,7 +3,6 @@ import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedBitfieldEncoder; -import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java index c7c3c87a..66ca80da 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java @@ -29,7 +29,7 @@ public void encode(BitString builder) { public void decode(BitString reader) { try { - this.value = reader.readInt(bitStringLength); + this.value = IntegerCache.valueOf(reader.readInt(bitStringLength)); } catch (Exception e) { throw new DecodingException(e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java index e9aac727..2fc17c8b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java @@ -3,7 +3,6 @@ import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerRangeEncoder; -import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java index 20b2bce9..afa05e31 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java @@ -4,7 +4,6 @@ import java.util.function.IntSupplier; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedBitfieldEncoder; -import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java index 7d6ebbfe..541e2b76 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java @@ -2,7 +2,6 @@ import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.datatype.encoder.OptimizedFixedRangeEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java index 9c49bc50..a6abb932 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java @@ -2,7 +2,6 @@ import java.util.AbstractList; import com.iab.gpp.encoder.bitstring.BitSet; -import com.iab.gpp.encoder.datatype.encoder.Dirtyable; /** * An optimized implementation of {@literal List} of fixed size. diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerCache.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/IntegerCache.java similarity index 73% rename from iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerCache.java rename to iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/IntegerCache.java index 07471ea2..fb7027ca 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerCache.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/IntegerCache.java @@ -1,6 +1,6 @@ -package com.iab.gpp.encoder.datatype.encoder; +package com.iab.gpp.encoder.datatype; -import static com.iab.gpp.encoder.datatype.encoder.IntegerSet.MAX_COLLECTION_SIZE; +import static com.iab.gpp.encoder.datatype.IntegerSet.MAX_COLLECTION_SIZE; final class IntegerCache { private IntegerCache() {} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/IntegerSet.java similarity index 99% rename from iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java rename to iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/IntegerSet.java index 9e880e60..d18667cf 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/IntegerSet.java @@ -1,4 +1,4 @@ -package com.iab.gpp.encoder.datatype.encoder; +package com.iab.gpp.encoder.datatype; import java.util.AbstractSet; import java.util.Collection; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java index 027934f8..5f0aa0b0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java @@ -1,8 +1,6 @@ package com.iab.gpp.encoder.datatype; import java.util.Collection; -import com.iab.gpp.encoder.datatype.encoder.Dirtyable; -import com.iab.gpp.encoder.datatype.encoder.IntegerSet; public final class RangeEntry implements Dirtyable { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java index addce7a1..02d993a9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java @@ -2,6 +2,7 @@ import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.datatype.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; public class FibonacciIntegerRangeEncoder { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java index c65a864a..cb1e14aa 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.datatype.encoder; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.datatype.IntegerSet; public class FixedBitfieldEncoder { private FixedBitfieldEncoder() {} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java index db32fca2..11ea840e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java @@ -2,6 +2,7 @@ import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.datatype.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; public class FixedIntegerRangeEncoder { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java index d32cc412..a7656e0c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.datatype.encoder; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.datatype.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractEncodable.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractEncodable.java index 7fc75676..cb095ae7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractEncodable.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractEncodable.java @@ -1,6 +1,6 @@ package com.iab.gpp.encoder.section; -import com.iab.gpp.encoder.datatype.encoder.Dirtyable; +import com.iab.gpp.encoder.datatype.Dirtyable; public abstract class AbstractEncodable implements Dirtyable { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java index 4f23d3b1..9c72f472 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java @@ -1,6 +1,6 @@ package com.iab.gpp.encoder.section; -import com.iab.gpp.encoder.datatype.encoder.IntegerSet; +import com.iab.gpp.encoder.datatype.IntegerSet; import com.iab.gpp.encoder.field.HeaderV1Field; import com.iab.gpp.encoder.segment.HeaderV1CoreSegment; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java index 18566835..6c617596 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java @@ -3,8 +3,8 @@ import java.time.Instant; import java.util.ArrayList; import java.util.List; +import com.iab.gpp.encoder.datatype.IntegerSet; import com.iab.gpp.encoder.datatype.RangeEntry; -import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.field.TcfCaV1Field; import com.iab.gpp.encoder.segment.TcfCaV1CoreSegment; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java index 54b54042..42ba5c2c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java @@ -3,8 +3,8 @@ import java.time.Instant; import java.util.ArrayList; import java.util.List; +import com.iab.gpp.encoder.datatype.IntegerSet; import com.iab.gpp.encoder.datatype.RangeEntry; -import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.field.TcfEuV2Field; import com.iab.gpp.encoder.segment.TcfEuV2CoreSegment; diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java index b1fa03eb..24905960 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java @@ -7,6 +7,7 @@ import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.datatype.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; public class FibonacciIntegerRangeEncoderTest { diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java index 65579a53..45a2feb0 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java @@ -5,6 +5,7 @@ import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.datatype.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; public class FixedBitfieldEncoderTest { diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java index bc9afb56..7d76b98f 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java @@ -7,6 +7,7 @@ import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.datatype.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; public class FixedIntegerRangeEncoderTest { diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/IntegerSetTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/IntegerSetTest.java index 7d4cdb3c..acd64a61 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/IntegerSetTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/IntegerSetTest.java @@ -6,6 +6,7 @@ import java.util.List; import java.util.Set; import org.junit.jupiter.api.Test; +import com.iab.gpp.encoder.datatype.IntegerSet; class IntegerSetTest { diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java index dda55beb..404646ff 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java @@ -8,8 +8,8 @@ import java.util.Set; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import com.iab.gpp.encoder.datatype.IntegerSet; import com.iab.gpp.encoder.datatype.RangeEntry; -import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.field.TcfEuV2Field; From 2638edb815fd75a4ea9c1e582a898ec79e29b1b7 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 3 Feb 2026 14:20:35 -0500 Subject: [PATCH 58/86] fewer field updates --- .../iab/gpp/encoder/bitstring/BitString.java | 26 ++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java index 4aba4d17..6e1f1a44 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java @@ -140,26 +140,40 @@ public void write(BitString other) { } public int readInt(int length) { - int out = 0; + int from = readIndex; + int to = from + length; + int writeIndex = this.writeIndex; int mask = 1 << length; - for (int i = 0; i < length; i++) { + int out = 0; + for (int i = from; i < to; i++) { mask >>= 1; - if (readBoolean()) { + if (i >= writeIndex) { + throw new DecodingException("Bit string access out of range"); + } + if (bitSet.get(i)) { out |= mask; } } + readIndex = to; return out; } public long readLong(int length) { - long out = 0; + int from = readIndex; + int to = from + length; + int writeIndex = this.writeIndex; long mask = 1L << length; - for (int i = 0; i < length; i++) { + long out = 0; + for (int i = from; i < to; i++) { mask >>= 1; - if (readBoolean()) { + if (i >= writeIndex) { + throw new DecodingException("Bit string access out of range"); + } + if (bitSet.get(i)) { out |= mask; } } + readIndex = to; return out; } From 51a08ab6f9e94d106cac08dabfca475f15a3ed99 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 3 Feb 2026 15:17:12 -0500 Subject: [PATCH 59/86] flip byte order --- .../base64/AbstractBase64UrlEncoder.java | 18 ++++---- .../com/iab/gpp/encoder/bitstring/BitSet.java | 41 ++++++++++--------- 2 files changed, 29 insertions(+), 30 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java index fba340f7..5d56cd5e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java @@ -22,11 +22,7 @@ public abstract class AbstractBase64UrlEncoder { static { Arrays.fill(REVERSE_DICT, NO_SYMBOL); for (int i = 0; i < DICT.length(); i++) { - // NOTE: the bit string is stored in a long[] and read from LSB to MSB - // but each base64 digit is read from MSB to LSB - // so they need to be reversed. - int value = Integer.reverse(i) >>> -BASE64_BITS; - REVERSE_DICT[DICT.charAt(i)] = value; + REVERSE_DICT[DICT.charAt(i)] = i; } } @@ -62,10 +58,10 @@ public BitString decode(CharSequence str) { if ((b1 | b2 | b3 | b4) < 0) { throw new DecodingException("Undecodable Base64URL string"); } - int bits0 = b4 << 18 | b3 << 12 | b2 << 6 | b1; - words[dst++] = (byte)(bits0); - words[dst++] = (byte)(bits0 >> 8); + int bits0 = b1 << 18 | b2 << 12 | b3 << 6 | b4; words[dst++] = (byte)(bits0 >> 16); + words[dst++] = (byte)(bits0 >> 8); + words[dst++] = (byte)(bits0); } if (length > limit) { remainder(str, words, length, src, dst); @@ -88,9 +84,9 @@ private static final void remainder(CharSequence str, byte[] words, int length, if ((b1 | b2 | b3 | b4) < 0) { throw new DecodingException("Undecodable Base64URL string"); } - int bits0 = b4 << 18 | b3 << 12 | b2 << 6 | b1; - words[dst++] = (byte)(bits0); - words[dst++] = (byte)(bits0 >> 8); + int bits0 = b1 << 18 | b2 << 12 | b3 << 6 | b4; words[dst++] = (byte)(bits0 >> 16); + words[dst++] = (byte)(bits0 >> 8); + words[dst++] = (byte)(bits0); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java index 3baab5e1..6c0fe4b1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java @@ -8,9 +8,10 @@ public final class BitSet { private static final byte[] EMPTY = new byte[0]; private static final int ADDRESS_BITS_PER_WORD = 3; - public static final int BITS_PER_WORD = 1 << ADDRESS_BITS_PER_WORD; - - /* Used to shift left or right for a partial word mask */ + private static final int BITS_PER_WORD = 1 << ADDRESS_BITS_PER_WORD; + private static final int MASK = 1 << (BITS_PER_WORD - 1); + private static final int MODULO = BITS_PER_WORD - 1; + private static final int CORRECTION = Integer.SIZE - BITS_PER_WORD; private static final int WORD_MASK = 0xffffffff; private byte[] words; @@ -26,14 +27,19 @@ public BitSet(int initialCapacity) { public BitSet() { this(EMPTY); } - - public static int wordIndex(int index) { + + private static int wordIndex(int index) { if (index < 0) { throw new DecodingException("got negative word index"); } return index >> ADDRESS_BITS_PER_WORD; } - + + private static int wordMask(int index) { + int bit = index & MODULO; + return MASK >> bit; + } + private byte[] ensureIndex(int wordIndex) { byte[] words = this.words; int wordsUsed = words.length; @@ -48,9 +54,8 @@ private byte[] ensureIndex(int wordIndex) { public boolean get(int bitIndex) { int wordIndex = wordIndex(bitIndex); byte[] words = this.words; - int bit = bitIndex % BITS_PER_WORD; return (wordIndex < words.length) - && ((words[wordIndex] >>> bit) & 1) == 1; + && (words[wordIndex] & wordMask(bitIndex)) != 0; } public void clear(int from, int to) { @@ -63,8 +68,7 @@ public void clear(int bitIndex) { int wordIndex = wordIndex(bitIndex); byte[] words = this.words; if (wordIndex < words.length) { - int bit = bitIndex % BITS_PER_WORD; - words[wordIndex] &= ~(1 << bit); + words[wordIndex] &= ~wordMask(bitIndex); } } @@ -77,16 +81,16 @@ public int nextSetBit(int fromIndex) { } int bit = fromIndex % BITS_PER_WORD; - int word = words[u] & (WORD_MASK << bit); + int word = (words[u] << CORRECTION) & (WORD_MASK >>> bit); while (true) { if (word != 0) { - return (u * BITS_PER_WORD) + Integer.numberOfTrailingZeros(word); + return (u * BITS_PER_WORD) + Integer.numberOfLeadingZeros(word); } if (++u == wordsInUse) { return -1; } - word = words[u]; + word = (words[u] << CORRECTION); } } @@ -99,20 +103,19 @@ public void set(int from, int to) { public void set(int bitIndex) { int wordIndex = wordIndex(bitIndex); byte[] words = ensureIndex(wordIndex); - int bit = bitIndex % BITS_PER_WORD; - words[wordIndex] |= (1 << bit); + words[wordIndex] |= wordMask(bitIndex); } public boolean set(int bitIndex, boolean value) { int wordIndex = wordIndex(bitIndex); + int wordMask = wordMask(bitIndex); byte[] words = ensureIndex(wordIndex); - int bit = bitIndex % BITS_PER_WORD; - boolean prior = ((words[wordIndex] >>> bit) & 1) == 1; + boolean prior = (words[wordIndex] & wordMask) != 0; if (prior != value) { if (value) { - words[wordIndex] |= (1 << bit); + words[wordIndex] |= wordMask; } else { - words[wordIndex] &= ~(1 << bit); + words[wordIndex] &= ~wordMask; } } return prior; From 9ed3b17e0bded30a1119d348dd59fa5bd0f797cf Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 3 Feb 2026 17:21:18 -0500 Subject: [PATCH 60/86] faster numeric decoders --- .../com/iab/gpp/encoder/bitstring/BitSet.java | 55 ++++++++++++++++++- .../iab/gpp/encoder/bitstring/BitString.java | 30 ++-------- 2 files changed, 60 insertions(+), 25 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java index 6c0fe4b1..1b81ac19 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java @@ -80,7 +80,7 @@ public int nextSetBit(int fromIndex) { return -1; } - int bit = fromIndex % BITS_PER_WORD; + int bit = fromIndex & MODULO; int word = (words[u] << CORRECTION) & (WORD_MASK >>> bit); while (true) { @@ -120,4 +120,57 @@ public boolean set(int bitIndex, boolean value) { } return prior; } + + + public int readInt(int from, int to) { + int startWordIndex = wordIndex(from); + int startBit = from & MODULO; + int endWordIndex = wordIndex(to); + int endBit = to & MODULO; + // TODO: is this needed if the caller checks range? + byte[] words = ensureIndex(endWordIndex); + int out = 0; + for(int wordIndex = startWordIndex; wordIndex <= endWordIndex; wordIndex++) { + int word = words[wordIndex] & 0xff; + if (wordIndex == startWordIndex) { + int mask = (0xff >>> startBit); + word &= mask; + } + if (wordIndex == endWordIndex) { + int mask = ~(0xff >> endBit); + word &= mask; + out |= word >>> (BITS_PER_WORD - endBit); + break; + } + int remaining = to - ((wordIndex + 1) << ADDRESS_BITS_PER_WORD); + out |= word << remaining; + } + return out; + } + + public long readLong(int from, int to) { + int startWordIndex = wordIndex(from); + int startBit = from & MODULO; + int endWordIndex = wordIndex(to); + int endBit = to & MODULO; + // TODO: is this needed if the caller checks range? + byte[] words = ensureIndex(endWordIndex); + long out = 0; + for(int wordIndex = startWordIndex; wordIndex <= endWordIndex; wordIndex++) { + long word = words[wordIndex] & 0xff; + if (wordIndex == startWordIndex) { + int mask = (0xff >>> startBit); + word &= mask; + } + if (wordIndex == endWordIndex) { + int mask = ~(0xff >> endBit); + word &= mask; + out |= word >>> (BITS_PER_WORD - endBit); + break; + } + int remaining = to - ((wordIndex + 1) << ADDRESS_BITS_PER_WORD); + out |= word << remaining; + } + return out; + } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java index 6e1f1a44..8303dadf 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java @@ -142,39 +142,21 @@ public void write(BitString other) { public int readInt(int length) { int from = readIndex; int to = from + length; - int writeIndex = this.writeIndex; - int mask = 1 << length; - int out = 0; - for (int i = from; i < to; i++) { - mask >>= 1; - if (i >= writeIndex) { - throw new DecodingException("Bit string access out of range"); - } - if (bitSet.get(i)) { - out |= mask; - } + if (from >= writeIndex) { + throw new DecodingException("Bit string access out of range"); } readIndex = to; - return out; + return bitSet.readInt(from, to); } public long readLong(int length) { int from = readIndex; int to = from + length; - int writeIndex = this.writeIndex; - long mask = 1L << length; - long out = 0; - for (int i = from; i < to; i++) { - mask >>= 1; - if (i >= writeIndex) { - throw new DecodingException("Bit string access out of range"); - } - if (bitSet.get(i)) { - out |= mask; - } + if (from >= writeIndex) { + throw new DecodingException("Bit string access out of range"); } readIndex = to; - return out; + return bitSet.readLong(from, to); } public boolean readBoolean() { From adcdb9b14c223282b259091deb82125d57ef6fd6 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 3 Feb 2026 17:27:23 -0500 Subject: [PATCH 61/86] cleanup --- .../com/iab/gpp/encoder/bitstring/BitSet.java | 25 ++++++++----------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java index 1b81ac19..8a640c6b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java @@ -12,7 +12,7 @@ public final class BitSet { private static final int MASK = 1 << (BITS_PER_WORD - 1); private static final int MODULO = BITS_PER_WORD - 1; private static final int CORRECTION = Integer.SIZE - BITS_PER_WORD; - private static final int WORD_MASK = 0xffffffff; + private static final int WORD_MASK = 0xff; private byte[] words; @@ -81,16 +81,17 @@ public int nextSetBit(int fromIndex) { } int bit = fromIndex & MODULO; - int word = (words[u] << CORRECTION) & (WORD_MASK >>> bit); + int word = words[u] & (WORD_MASK >>> bit); while (true) { + word &= WORD_MASK; if (word != 0) { - return (u * BITS_PER_WORD) + Integer.numberOfLeadingZeros(word); + return (u * BITS_PER_WORD) + Integer.numberOfLeadingZeros(word) - CORRECTION; } if (++u == wordsInUse) { return -1; } - word = (words[u] << CORRECTION); + word = words[u]; } } @@ -131,14 +132,12 @@ public int readInt(int from, int to) { byte[] words = ensureIndex(endWordIndex); int out = 0; for(int wordIndex = startWordIndex; wordIndex <= endWordIndex; wordIndex++) { - int word = words[wordIndex] & 0xff; + int word = words[wordIndex] & WORD_MASK; if (wordIndex == startWordIndex) { - int mask = (0xff >>> startBit); - word &= mask; + word &= WORD_MASK >>> startBit; } if (wordIndex == endWordIndex) { - int mask = ~(0xff >> endBit); - word &= mask; + word &= ~(WORD_MASK >> endBit); out |= word >>> (BITS_PER_WORD - endBit); break; } @@ -157,14 +156,12 @@ public long readLong(int from, int to) { byte[] words = ensureIndex(endWordIndex); long out = 0; for(int wordIndex = startWordIndex; wordIndex <= endWordIndex; wordIndex++) { - long word = words[wordIndex] & 0xff; + long word = words[wordIndex] & WORD_MASK; if (wordIndex == startWordIndex) { - int mask = (0xff >>> startBit); - word &= mask; + word &= (WORD_MASK >>> startBit); } if (wordIndex == endWordIndex) { - int mask = ~(0xff >> endBit); - word &= mask; + word &= ~(WORD_MASK >> endBit); out |= word >>> (BITS_PER_WORD - endBit); break; } From 8df35e0e55d8d975f72ee403f9fe2ab7f24dfff4 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Mon, 9 Feb 2026 17:25:04 -0500 Subject: [PATCH 62/86] clean up DataType --- .../AbstractDirtyableBitStringDataType.java | 14 ++-- .../AbstractEncodableBitStringDataType.java | 73 +++---------------- .../iab/gpp/encoder/datatype/DataType.java | 64 +++++++++++++++- .../EncodableArrayOfFixedIntegerRanges.java | 28 +++---- .../encoder/datatype/EncodableBoolean.java | 22 ++++-- .../encoder/datatype/EncodableDataType.java | 9 --- .../encoder/datatype/EncodableDatetime.java | 20 +++-- .../datatype/EncodableFibonacciInteger.java | 25 +++---- .../EncodableFibonacciIntegerRange.java | 24 +++--- .../datatype/EncodableFixedBitfield.java | 21 +++--- .../datatype/EncodableFixedInteger.java | 26 ++++--- .../datatype/EncodableFixedIntegerList.java | 25 +++---- .../datatype/EncodableFixedIntegerRange.java | 24 +++--- .../datatype/EncodableFixedString.java | 26 ++++--- .../datatype/EncodableFlexibleBitfield.java | 23 +++--- .../EncodableOptimizedFixedRange.java | 24 +++--- .../encoder/datatype/UnencodableBoolean.java | 22 +++--- .../datatype/UnencodableCharacter.java | 56 ++------------ .../encoder/datatype/UnencodableInteger.java | 56 ++------------ .../gpp/encoder/section/EncodableSection.java | 29 +++----- .../segment/AbstractBase64Segment.java | 4 +- .../AbstractLazilyEncodableSegment.java | 61 +++++++++------- .../gpp/encoder/segment/EncodableSegment.java | 5 +- .../encoder/segment/TcfCaV1CoreSegment.java | 6 +- .../TcfCaV1PublisherPurposesSegment.java | 2 +- .../encoder/segment/TcfEuV2CoreSegment.java | 7 +- .../TcfEuV2PublisherPurposesSegment.java | 2 +- .../gpp/encoder/segment/UspV1CoreSegment.java | 16 ++-- .../EncodableFixedIntegerRangeTest.java | 16 ++-- .../EncodableOptimizedFixedRangeTest.java | 32 ++++---- .../FixedIntegerListEncoderTest.java | 6 +- 31 files changed, 339 insertions(+), 429 deletions(-) delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDataType.java rename iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/{encoder => }/FixedIntegerListEncoderTest.java (97%) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java index bd2c0ed7..5fdc05f0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java @@ -5,18 +5,16 @@ public abstract class AbstractDirtyableBitStringDataType extends AbstractEncodableBitStringDataType { - protected AbstractDirtyableBitStringDataType(boolean hardFailIfMissing) { - super(hardFailIfMissing); - } - @Override - public boolean isDirty() { - return super.isDirty() || (value != null && value.isDirty()); + public boolean isDirty(Object[] values, int index) { + T value = get(values, index); + return (value != null && value.isDirty()); } + @SuppressWarnings("unchecked") @Override - public void setDirty(boolean dirty) { - super.setDirty(dirty); + public void setDirty(Object[] values, int index, boolean dirty) { + T value = (T) values[index]; if (value != null) { value.setDirty(dirty); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java index cb0945b1..9ef6b881 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java @@ -1,76 +1,23 @@ package com.iab.gpp.encoder.datatype; -import java.util.Collection; import java.util.function.Predicate; -import java.util.stream.Collectors; - -import com.iab.gpp.encoder.error.ValidationException; - -public abstract class AbstractEncodableBitStringDataType extends EncodableDataType { - //this if for backwards compatibility with the newer fields - protected boolean hardFailIfMissing = true; - private boolean dirty = false; - private Predicate validator = null; - protected T value; - - protected AbstractEncodableBitStringDataType(boolean hardFailIfMissing) { - this.hardFailIfMissing = hardFailIfMissing; - } +import com.iab.gpp.encoder.bitstring.BitString; +public abstract class AbstractEncodableBitStringDataType extends DataType { public AbstractEncodableBitStringDataType withValidator(Predicate validator) { this.validator = validator; return this; } - - public final boolean hasValue() { - return this.value != null; - } - - public final T getValue() { - if (this.value == null) { - this.value = getDefaultValue(); - } - return this.value; - } - - protected T getDefaultValue() { - return null; - } - - public void setValue(Object value) { - setValue(value, true); - } - @SuppressWarnings("unchecked") - protected final void setValue(Object value, boolean dirty) { - T v = (T) value; - if (validator == null || validator.test(v)) { - this.value = v; - this.dirty = dirty; - } else { - if (v instanceof Collection) { - throw new ValidationException("Invalid value '" - + ((Collection) v).stream().map(Object::toString).collect(Collectors.joining(",")) + "'"); - } else { - throw new ValidationException("Invalid value '" + v + "'"); - } - } - - } - - public final boolean getHardFailIfMissing() { - return this.hardFailIfMissing; - } - - public boolean isDirty() { - return dirty; - } - - public void setDirty(boolean dirty) { - this.dirty = dirty; + public final void encode(BitString writer, Object[] values, int index) { + encode(writer, get(values, index)); } + + protected abstract void encode(BitString writer, T value); - public String toString() { - return String.valueOf(value); + public final void decode(BitString reader, Object[] values, int index) { + values[index] = decode(reader); } + + protected abstract T decode(BitString reader); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java index 731be014..4c9a2569 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java @@ -1,7 +1,63 @@ package com.iab.gpp.encoder.datatype; -public abstract class DataType implements Dirtyable { - public abstract boolean hasValue(); - public abstract T getValue(); - public abstract void setValue(Object value); +import java.util.Collection; +import java.util.function.Predicate; +import java.util.stream.Collectors; +import com.iab.gpp.encoder.error.ValidationException; + +public abstract class DataType { + + protected Predicate validator = null; + + public DataType withValidator(Predicate validator) { + this.validator = validator; + return this; + } + + protected final void validate(T v) { + if (validator == null || validator.test(v)) { + return; + } else { + if (v instanceof Collection) { + throw new ValidationException("Invalid value '" + + ((Collection) v).stream().map(Object::toString).collect(Collectors.joining(",")) + "'"); + } else { + throw new ValidationException("Invalid value '" + v + "'"); + } + } + } + + public boolean isDirty(Object[] values, int index) { + return false; + } + + public void setDirty(Object[] values, int index, boolean dirty) { + // pass + } + + @SuppressWarnings("unchecked") + public final T get(Object[] values, int index) { + T value = (T) values[index]; + if (value == null) { + value = initialize(); + values[index] = value; + } + return value; + } + + public final void set(Object[] values, int index, Object newValue) { + T oldValue = get(values, index); + T effectiveValue = processValue(oldValue, newValue); + validate(effectiveValue); + values[index] = effectiveValue; + } + + protected abstract T initialize(); + + // TODO: rename + @SuppressWarnings("unchecked") + protected T processValue(T oldValue, Object newValue) { + return (T) newValue; + } + } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java index 9f18f835..d46c589d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java @@ -8,38 +8,38 @@ public final class EncodableArrayOfFixedIntegerRanges extends AbstractDirtyableBitStringDataType> { - private int keyBitStringLength; - private int typeBitStringLength; + private final int keyBitStringLength; + private final int typeBitStringLength; public EncodableArrayOfFixedIntegerRanges(int keyBitStringLength, int typeBitStringLength, boolean hardFailIfMissing) { - super(hardFailIfMissing); this.keyBitStringLength = keyBitStringLength; this.typeBitStringLength = typeBitStringLength; - this.value = new DirtyableList<>(); } @Override - public void encode(BitString sb) { - try { - List entries = this.value; + protected DirtyableList initialize() { + return new DirtyableList<>(); + } + @Override + protected void encode(BitString sb, DirtyableList entries) { + try { sb.writeInt(entries.size(), 12); for (RangeEntry entry : entries) { sb.writeInt(entry.getKey(), keyBitStringLength); sb.writeInt(entry.getType(), typeBitStringLength); FixedIntegerRangeEncoder.encode(sb, entry.getIds()); } - } catch (Exception e) { throw new EncodingException(e); } } @Override - public void decode(BitString reader) { + protected DirtyableList decode(BitString reader) { try { int size = reader.readInt(12); - value.clear(); + DirtyableList value = initialize(); for (int i = 0; i < size; i++) { int key = reader.readInt(keyBitStringLength); int type = reader.readInt(typeBitStringLength); @@ -47,6 +47,7 @@ public void decode(BitString reader) { RangeEntry entry = new RangeEntry(key, type, ids); value.add(entry); } + return value; } catch (Exception e) { throw new DecodingException(e); } @@ -54,8 +55,9 @@ public void decode(BitString reader) { @SuppressWarnings("unchecked") @Override - public void setValue(Object value) { - this.value.clear(); - this.value.addAll((List) value); + protected DirtyableList processValue(DirtyableList oldValue, Object newValue) { + oldValue.clear(); + oldValue.addAll((List) newValue); + return oldValue; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java index 1bfa4f19..08465a8a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java @@ -6,22 +6,30 @@ public final class EncodableBoolean extends AbstractEncodableBitStringDataType { - public EncodableBoolean(Boolean value) { - super(true); - setValue(value, false); + private final Boolean initial; + + public EncodableBoolean(Boolean initial) { + this.initial = initial; + } + + @Override + protected Boolean initialize() { + return initial; } - public void encode(BitString builder){ + @Override + protected void encode(BitString builder, Boolean value){ try { - builder.writeBoolean(this.value); + builder.writeBoolean(value); } catch (Exception e) { throw new EncodingException(e); } } - public void decode(BitString reader) { + @Override + protected Boolean decode(BitString reader) { try { - this.value = reader.readBoolean(); + return reader.readBoolean(); } catch (Exception e) { throw new DecodingException(e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDataType.java deleted file mode 100644 index b63b410f..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDataType.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.iab.gpp.encoder.datatype; - -import com.iab.gpp.encoder.bitstring.BitString; - -public abstract class EncodableDataType extends DataType { - public abstract void encode(BitString writer); - - public abstract void decode(BitString reader); -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java index f55252dd..1977078e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java @@ -8,26 +8,24 @@ public final class EncodableDatetime extends AbstractEncodableBitStringDataType { - protected EncodableDatetime() { - super(true); + @Override + protected Instant initialize() { + return Instant.EPOCH; } - public EncodableDatetime(Instant value) { - super(true); - setValue(value, false); - } - - public void encode(BitString builder) { + @Override + protected void encode(BitString builder, Instant value) { try { - DatetimeEncoder.encode(builder, this.value); + DatetimeEncoder.encode(builder, value); } catch (Exception e) { throw new EncodingException(e); } } - public void decode(BitString reader) { + @Override + protected Instant decode(BitString reader) { try { - this.value = DatetimeEncoder.decode(reader); + return DatetimeEncoder.decode(reader); } catch (Exception e) { throw new DecodingException(e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java index f4dacdb1..74a327a3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java @@ -6,31 +6,30 @@ public final class EncodableFibonacciInteger extends AbstractEncodableBitStringDataType { - protected EncodableFibonacciInteger() { - super(true); - } + private final Integer initial; - public EncodableFibonacciInteger(Integer value) { - super(true); - setValue(value, false); + public EncodableFibonacciInteger(Integer initial) { + this.initial = initial; } - public EncodableFibonacciInteger(Integer value, boolean hardFailIfMissing) { - super(hardFailIfMissing); - setValue(value, false); + @Override + protected Integer initialize() { + return initial; } - public void encode(BitString builder) { + @Override + protected void encode(BitString builder, Integer value) { try { - builder.writeFibonacci(this.value); + builder.writeFibonacci(value); } catch (Exception e) { throw new EncodingException(e); } } - public void decode(BitString reader) { + @Override + protected Integer decode(BitString reader) { try { - this.value = reader.readFibonacci(); + return reader.readFibonacci(); } catch (Exception e) { throw new DecodingException(e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java index e66c2137..96987231 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java @@ -8,26 +8,24 @@ public final class EncodableFibonacciIntegerRange extends AbstractDirtyableBitStringDataType { - public EncodableFibonacciIntegerRange() { - super(true); - } - @Override - protected IntegerSet getDefaultValue() { + public IntegerSet initialize() { return new IntegerSet(); } - public void encode(BitString builder) { + @Override + protected void encode(BitString builder, IntegerSet value) { try { - FibonacciIntegerRangeEncoder.encode(builder, this.getValue()); + FibonacciIntegerRangeEncoder.encode(builder, value); } catch (Exception e) { throw new EncodingException(e); } } - public void decode(BitString reader) { + @Override + protected IntegerSet decode(BitString reader) { try { - this.value = FibonacciIntegerRangeEncoder.decode(reader); + return FibonacciIntegerRangeEncoder.decode(reader); } catch (Exception e) { throw new DecodingException(e); } @@ -35,9 +33,9 @@ public void decode(BitString reader) { @SuppressWarnings("unchecked") @Override - public void setValue(Object newValue) { - IntegerSet value = this.getValue(); - value.clear(); - value.addAll((Collection) newValue); + protected IntegerSet processValue(IntegerSet oldValue, Object newValue) { + oldValue.clear(); + oldValue.addAll((Collection) newValue); + return oldValue; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java index 18f28806..db2d531e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java @@ -11,26 +11,27 @@ public final class EncodableFixedBitfield extends AbstractDirtyableBitStringData private final int numElements; public EncodableFixedBitfield(int numElements) { - super(true); this.numElements = numElements; } @Override - protected IntegerSet getDefaultValue() { + protected IntegerSet initialize() { return new IntegerSet(numElements); } - public void encode(BitString builder) { + @Override + protected void encode(BitString builder, IntegerSet value) { try { - FixedBitfieldEncoder.encode(builder, this.getValue(), this.numElements); + FixedBitfieldEncoder.encode(builder, value, this.numElements); } catch (Exception e) { throw new EncodingException(e); } } - public void decode(BitString reader) { + @Override + protected IntegerSet decode(BitString reader) { try { - this.value = reader.readIntegerSet(this.numElements); + return reader.readIntegerSet(this.numElements); } catch (Exception e) { throw new DecodingException(e); } @@ -38,9 +39,9 @@ public void decode(BitString reader) { @SuppressWarnings("unchecked") @Override - public void setValue(Object newValue) { - IntegerSet value = this.getValue(); - value.clear(); - value.addAll((Collection) newValue); + protected IntegerSet processValue(IntegerSet oldValue, Object newValue) { + oldValue.clear(); + oldValue.addAll((Collection) newValue); + return oldValue; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java index 66ca80da..865e4988 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java @@ -6,30 +6,32 @@ public final class EncodableFixedInteger extends AbstractEncodableBitStringDataType { - private int bitStringLength; - - protected EncodableFixedInteger(int bitStringLength) { - super(true); + private final int bitStringLength; + private final Integer initial; + + public EncodableFixedInteger(int bitStringLength, Integer initial) { this.bitStringLength = bitStringLength; + this.initial = initial; } - public EncodableFixedInteger(int bitStringLength, Integer value) { - super(true); - this.bitStringLength = bitStringLength; - setValue(value, false); + @Override + protected Integer initialize() { + return initial; } - public void encode(BitString builder) { + @Override + protected void encode(BitString builder, Integer value) { try { - builder.writeInt(this.value, this.bitStringLength); + builder.writeInt(value, this.bitStringLength); } catch (Exception e) { throw new EncodingException(e); } } - public void decode(BitString reader) { + @Override + protected Integer decode(BitString reader) { try { - this.value = IntegerCache.valueOf(reader.readInt(bitStringLength)); + return IntegerCache.valueOf(reader.readInt(bitStringLength)); } catch (Exception e) { throw new DecodingException(e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java index 3d5e411e..11ff574b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java @@ -8,31 +8,32 @@ public final class EncodableFixedIntegerList extends AbstractDirtyableBitStringDataType { - private int elementBitStringLength; - private int numElements; + private final int elementBitStringLength; + private final int numElements; public EncodableFixedIntegerList(int elementBitStringLength, int numElements) { - super(true); this.elementBitStringLength = elementBitStringLength; this.numElements = numElements; } @Override - protected FixedIntegerList getDefaultValue() { + protected FixedIntegerList initialize() { return new FixedIntegerList(elementBitStringLength, numElements); } - public void encode(BitString builder) { + @Override + protected void encode(BitString builder, FixedIntegerList value) { try { - FixedIntegerListEncoder.encode(builder, this.getValue(), this.elementBitStringLength, this.numElements); + FixedIntegerListEncoder.encode(builder, value, this.elementBitStringLength, this.numElements); } catch (Exception e) { throw new EncodingException(e); } } - public void decode(BitString reader) { + @Override + protected FixedIntegerList decode(BitString reader) { try { - this.value = reader.readFixedIntegerList(elementBitStringLength, numElements); + return reader.readFixedIntegerList(elementBitStringLength, numElements); } catch (Exception e) { throw new DecodingException(e); } @@ -40,14 +41,12 @@ public void decode(BitString reader) { @SuppressWarnings("unchecked") @Override - public void setValue(Object newValue) { - FixedIntegerList value = this.getValue(); + protected FixedIntegerList processValue(FixedIntegerList oldValue, Object newValue) { List list = (List) newValue; int size = list.size(); for (int i = 0; i < numElements; i++) { - value.set(i, i < size ? list.get(i) : 0); + oldValue.set(i, i < size ? list.get(i) : 0); } - // call validator - super.setValue(value); + return oldValue; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java index 2fc17c8b..c1aeee48 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java @@ -8,26 +8,24 @@ public final class EncodableFixedIntegerRange extends AbstractDirtyableBitStringDataType { - protected EncodableFixedIntegerRange() { - super(true); - } - @Override - protected IntegerSet getDefaultValue() { + protected IntegerSet initialize() { return new IntegerSet(); } - public void encode(BitString builder) { + @Override + protected void encode(BitString builder, IntegerSet value) { try { - FixedIntegerRangeEncoder.encode(builder, this.getValue()); + FixedIntegerRangeEncoder.encode(builder, value); } catch (Exception e) { throw new EncodingException(e); } } - public void decode(BitString reader) { + @Override + protected IntegerSet decode(BitString reader) { try { - this.value = FixedIntegerRangeEncoder.decode(reader); + return FixedIntegerRangeEncoder.decode(reader); } catch (Exception e) { throw new DecodingException(e); } @@ -35,9 +33,9 @@ public void decode(BitString reader) { @SuppressWarnings("unchecked") @Override - public void setValue(Object newValue) { - IntegerSet value = this.getValue(); - value.clear(); - value.addAll((Collection) newValue); + protected IntegerSet processValue(IntegerSet oldValue, Object newValue) { + oldValue.clear(); + oldValue.addAll((Collection) newValue); + return oldValue; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java index 740b7de7..1d4ac2de 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java @@ -7,30 +7,32 @@ public final class EncodableFixedString extends AbstractEncodableBitStringDataType { - private int stringLength; + private final int stringLength; + private final String initial; - protected EncodableFixedString(int stringLength) { - super(true); + public EncodableFixedString(int stringLength, String initial) { this.stringLength = stringLength; + this.initial = initial; } - public EncodableFixedString(int stringLength, String value) { - super(true); - this.stringLength = stringLength; - setValue(value, false); + @Override + protected String initialize() { + return initial; } - - public void encode(BitString builder) { + + @Override + protected void encode(BitString builder, String value) { try { - FixedStringEncoder.encode(builder, this.value, this.stringLength); + FixedStringEncoder.encode(builder, value, this.stringLength); } catch (Exception e) { throw new EncodingException(e); } } - public void decode(BitString reader) { + @Override + protected String decode(BitString reader) { try { - this.value = FixedStringEncoder.decode(reader, this.stringLength); + return FixedStringEncoder.decode(reader, this.stringLength); } catch (Exception e) { throw new DecodingException(e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java index afa05e31..7dddb9c4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java @@ -9,29 +9,30 @@ public final class EncodableFlexibleBitfield extends AbstractDirtyableBitStringDataType { - private IntSupplier getLengthSupplier; + private final IntSupplier getLengthSupplier; public EncodableFlexibleBitfield(IntSupplier getLengthSupplier) { - super(true); this.getLengthSupplier = getLengthSupplier; } @Override - protected IntegerSet getDefaultValue() { + protected IntegerSet initialize() { return new IntegerSet(); } - public void encode(BitString builder) { + @Override + protected void encode(BitString builder, IntegerSet value) { try { - FixedBitfieldEncoder.encode(builder, this.getValue(), this.getLengthSupplier.getAsInt()); + FixedBitfieldEncoder.encode(builder, value, this.getLengthSupplier.getAsInt()); } catch (Exception e) { throw new EncodingException(e); } } - public void decode(BitString reader) { + @Override + protected IntegerSet decode(BitString reader) { try { - this.value = reader.readIntegerSet(getLengthSupplier.getAsInt()); + return reader.readIntegerSet(getLengthSupplier.getAsInt()); } catch (Exception e) { throw new DecodingException(e); } @@ -40,9 +41,9 @@ public void decode(BitString reader) { @SuppressWarnings("unchecked") @Override - public void setValue(Object newValue) { - IntegerSet value = this.getValue(); - value.clear(); - value.addAll((Collection) newValue); + protected IntegerSet processValue(IntegerSet oldValue, Object newValue) { + oldValue.clear(); + oldValue.addAll((Collection) newValue); + return oldValue; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java index 541e2b76..6e51a002 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java @@ -9,26 +9,24 @@ public final class EncodableOptimizedFixedRange extends AbstractDirtyableBitStringDataType { - public EncodableOptimizedFixedRange() { - super(true); - } - @Override - protected IntegerSet getDefaultValue() { + protected IntegerSet initialize() { return new IntegerSet(); } - public void encode(BitString builder) { + @Override + protected void encode(BitString builder, IntegerSet value) { try { - OptimizedFixedRangeEncoder.encode(builder, this.getValue()); + OptimizedFixedRangeEncoder.encode(builder, value); } catch (Exception e) { throw new EncodingException(e); } } - public void decode(BitString reader) { + @Override + protected IntegerSet decode(BitString reader) { try { - this.value = OptimizedFixedRangeEncoder.decode(reader); + return OptimizedFixedRangeEncoder.decode(reader); } catch (Exception e) { throw new DecodingException(e); } @@ -36,9 +34,9 @@ public void decode(BitString reader) { @SuppressWarnings("unchecked") @Override - public void setValue(Object newValue) { - IntegerSet value = this.getValue(); - value.clear(); - value.addAll((Collection) newValue); + protected IntegerSet processValue(IntegerSet oldValue, Object newValue) { + oldValue.clear(); + oldValue.addAll((Collection) newValue); + return oldValue; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java index 71171ecd..b641fcb1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java @@ -4,21 +4,25 @@ public final class UnencodableBoolean extends AbstractEncodableBitStringDataType { - protected UnencodableBoolean() { - super(true); - } + private final Boolean initial; - public UnencodableBoolean(Boolean value) { - super(true); - setValue(value, false); + public UnencodableBoolean(Boolean initial) { + this.initial = initial; + } + + @Override + protected Boolean initialize() { + return initial; } - public void encode(BitString builder){ + @Override + protected void encode(BitString writer, Boolean value) { // pass } - public void decode(BitString reader) { - // pass + @Override + protected Boolean decode(BitString reader) { + return Boolean.FALSE; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableCharacter.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableCharacter.java index 8b0739fe..ee9cc941 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableCharacter.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableCharacter.java @@ -1,61 +1,19 @@ package com.iab.gpp.encoder.datatype; import java.util.function.Predicate; -import com.iab.gpp.encoder.error.ValidationException; public final class UnencodableCharacter extends DataType { - private boolean dirty = false; - private Predicate validator; - private Character value = null; - - public UnencodableCharacter() { - this.validator = v -> true; - } - - public UnencodableCharacter(Character value) { - this.validator = v -> true; - setValue(value); - } - - public UnencodableCharacter(Character value, Predicate validator) { - this.validator = validator; - setValue(value); - } - - public void setValidator(Predicate validator) { - this.validator = validator; - } - - @Override - public boolean hasValue() { - return this.value != null; - } - - @Override - public Character getValue() { - return this.value; - } - - @Override - public void setValue(Object value) { - Character c = (Character)value.toString().charAt(0); - if(validator.test(c)) { - this.value = c; - this.dirty = true; - } else { - throw new ValidationException("Invalid value '" + c + "'"); - } - } - - @Override - public boolean isDirty() { - return dirty; + private final Character initial; + + public UnencodableCharacter(Character initial, Predicate validator) { + this.initial = initial; + withValidator(validator); } @Override - public void setDirty(boolean dirty) { - this.dirty = dirty; + protected Character initialize() { + return initial; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableInteger.java index 8ffc7e02..17c9876d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableInteger.java @@ -1,60 +1,16 @@ package com.iab.gpp.encoder.datatype; -import java.util.function.Predicate; -import com.iab.gpp.encoder.error.ValidationException; - public final class UnencodableInteger extends DataType { - private boolean dirty; - private Predicate validator; - private Integer value = null; - - public UnencodableInteger() { - this.validator = v -> true; - } - - public UnencodableInteger(Integer value) { - this.validator = v -> true; - setValue(value); - } - - public UnencodableInteger(Integer value, Predicate validator) { - this.validator = validator; - setValue(value); - } - - public void setValidator(Predicate validator) { - this.validator = validator; + private final Integer initial; + + public UnencodableInteger(Integer initial) { + this.initial = initial; } @Override - public boolean hasValue() { - return this.value != null; + protected Integer initialize() { + return initial; } - @Override - public Integer getValue() { - return this.value; - } - - @Override - public void setValue(Object value) { - Integer i = (Integer)value; - if(validator.test(i)) { - this.value = i; - this.dirty = true; - } else { - throw new ValidationException("Invalid value '" + i + "'"); - } - } - - @Override - public boolean isDirty() { - return dirty; - } - - @Override - public void setDirty(boolean dirty) { - this.dirty = dirty; - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java index 089ae70b..4b10013f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java @@ -2,7 +2,6 @@ import java.util.ArrayList; import java.util.List; -import com.iab.gpp.encoder.datatype.DataType; import com.iab.gpp.encoder.error.InvalidFieldException; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; @@ -64,7 +63,7 @@ public final boolean hasField(FieldKey fieldName) { for (int i = 0; i < numSegments; i++) { EncodableSegment segment = getSegment(i); E key = segment.resolveKey(fieldName); - if (key != null && segment.getField(key) != null) { + if (key != null) { return true; } } @@ -78,7 +77,7 @@ public final boolean hasField(E fieldName) { int numSegments = size(); for (int i = 0; i < numSegments; i++) { EncodableSegment segment = getSegment(i); - if (segment.getField(fieldName) != null) { + if (segment.hasField(fieldName)) { return true; } } @@ -94,10 +93,7 @@ public final Object getFieldValue(FieldKey fieldName) { EncodableSegment segment = getSegment(i); E key = segment.resolveKey(fieldName); if (key != null) { - DataType field = segment.getField(key); - if (field != null) { - return field.getValue(); - } + return segment.getFieldValue(key); } } @@ -110,9 +106,8 @@ public final Object getFieldValue(E fieldName) { int numSegments = size(); for (int i = 0; i < numSegments; i++) { EncodableSegment segment = getSegment(i); - DataType field = segment.getField(fieldName); - if (field != null) { - return field.getValue(); + if (segment.hasField(fieldName)) { + return segment.getFieldValue(fieldName); } } @@ -127,12 +122,9 @@ public final void setFieldValue(FieldKey fieldName, Object value) { EncodableSegment segment = getSegment(i); E key = segment.resolveKey(fieldName); if (key != null) { - DataType field = segment.getField(key); - if (field != null) { - field.setValue(value); - onSet(key); - return; - } + segment.setFieldValue(key, value); + onSet(key); + return; } } @@ -145,9 +137,8 @@ public final void setFieldValue(E fieldName, Object value) { int numSegments = size(); for (int i = 0; i < numSegments; i++) { EncodableSegment segment = getSegment(i); - DataType field = segment.getField(fieldName); - if(field != null) { - field.setValue(value); + if(segment.hasField(fieldName)) { + segment.setFieldValue(fieldName, value); onSet(fieldName); return; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java index 16d2bd50..abe64edc 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java @@ -26,7 +26,7 @@ protected final CharSequence doEncode() { for (int i = 0; i < size; i++) { AbstractEncodableBitStringDataType field = get(i); if (field != null) { - field.encode(bitString); + field.encode(bitString, values, i); } else { throw new EncodingException("Field not found: '" + fieldNames.get(i) + "'"); } @@ -44,7 +44,7 @@ protected final void doDecode(CharSequence encodedString) { AbstractEncodableBitStringDataType field = get(i); if (field != null) { try { - field.decode(bitString); + field.decode(bitString, values, i); } catch (Exception e) { throw new DecodingException("Unable to decode " + fieldNames.get(i), e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java index 81372e59..a06c981d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java @@ -21,18 +21,15 @@ abstract class AbstractLazilyEncodableSegment & FieldKey, T ex }); protected final FieldNames fieldNames; - private final Object[] values; + private final Object[] types; + protected final Object[] values; + private boolean dirty; protected AbstractLazilyEncodableSegment(FieldNames fieldNames) { this.fieldNames = fieldNames; this.values = new Object[fieldNames.size()]; - } - - - @Override - public final DataType getField(E fieldName) { - ensureDecode(); - return get(fieldName); + // TODO: move to FieldNames + this.types = new Object[fieldNames.size()]; } @Override @@ -45,12 +42,12 @@ protected final void initialize(E key, T value) { if (index == null) { throw new IllegalArgumentException("invalid key "+ key); } - values[index] = value; + types[index] = value; } @SuppressWarnings("unchecked") protected final T get(int index) { - return (T) values[index]; + return (T) types[index]; } protected final T get(E key) { @@ -61,12 +58,19 @@ protected final T get(E key) { return null; } + @Override + public final boolean hasField(E key) { + return get(key) != null; + } + @Override public final boolean isDirty() { + if (dirty) { + return dirty; + } int size = fieldNames.size(); for (int i = 0; i < size; i++) { - T value = get(i); - if (value != null && value.isDirty()) { + if (get(i).isDirty(values, i)) { return true; } } @@ -75,34 +79,39 @@ public final boolean isDirty() { @Override public final void setDirty(boolean dirty) { + this.dirty = dirty; int size = fieldNames.size(); for (int i = 0; i < size; i++) { - T value = get(i); - if (value != null) { - value.setDirty(dirty); - } + get(i).setDirty(values, i, dirty); } } @Override - public Object getFieldValue(E fieldName) { + public final Object getFieldValue(E fieldName) { ensureDecode(); - - DataType field = this.get(fieldName); - if (field != null) { - return field.getValue(); + return getFieldValueUnsafe(fieldName); + } + + protected final Object getFieldValueUnsafe(E fieldName) { + Integer index = fieldNames.getIndex(fieldName); + if (index != null) { + return get(index).get(values, index); } else { throw new InvalidFieldException("Invalid field: '" + fieldName + "'"); } } @Override - public void setFieldValue(E fieldName, Object value) { + public final void setFieldValue(E fieldName, Object value) { ensureDecode(); + setFieldValueUnsafe(fieldName, value); + } - DataType field = this.get(fieldName); - if (field != null) { - field.setValue(value); + protected final void setFieldValueUnsafe(E fieldName, Object value) { + Integer index = fieldNames.getIndex(fieldName); + if (index != null) { + get(index).set(values, index, value); + dirty = true; } else { throw new InvalidFieldException(fieldName + " not found"); } @@ -116,7 +125,7 @@ public String toString() { int size = fieldNames.size(); for (int i = 0; i < size; i++) { E field = fieldNames.get(i); - sb.append(", ").append(field.getName()).append('=').append(get(field)); + sb.append(", ").append(field.getName()).append('=').append(values[i]); } sb.append('}'); return sb.toString(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java index 00bfdfdd..c91ce0b4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java @@ -1,14 +1,13 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.DataType; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.section.AbstractEncodable; public abstract class EncodableSegment & FieldKey> extends AbstractEncodable { public abstract E resolveKey(FieldKey fieldName); - - public abstract DataType getField(E fieldName); + public abstract boolean hasField(E fieldName); + public abstract Object getFieldValue(E fieldName); public abstract void setFieldValue(E fieldName, Object value); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java index 6be9b664..51b405cf 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import java.time.Instant; import com.iab.gpp.encoder.datatype.EncodableArrayOfFixedIntegerRanges; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableDatetime; @@ -16,10 +15,9 @@ public final class TcfCaV1CoreSegment extends AbstractBase64Segment Date: Mon, 9 Feb 2026 18:27:29 -0500 Subject: [PATCH 63/86] unify datatype hierarchy --- .../datatype/AbstractEncodableBitStringDataType.java | 8 +++++--- .../java/com/iab/gpp/encoder/datatype/DataType.java | 9 +++++++++ .../gpp/encoder/segment/AbstractBase64Segment.java | 8 ++++---- .../segment/AbstractLazilyEncodableSegment.java | 11 +++++------ .../com/iab/gpp/encoder/segment/UspV1CoreSegment.java | 3 +-- .../datatype/EncodableFixedIntegerRangeTest.java | 1 - .../encoder/datatype/FixedIntegerListEncoderTest.java | 2 -- 7 files changed, 24 insertions(+), 18 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java index 9ef6b881..768e34d2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java @@ -8,16 +8,18 @@ public AbstractEncodableBitStringDataType withValidator(Predicate validato this.validator = validator; return this; } - + + @Override public final void encode(BitString writer, Object[] values, int index) { encode(writer, get(values, index)); } - + protected abstract void encode(BitString writer, T value); + @Override public final void decode(BitString reader, Object[] values, int index) { values[index] = decode(reader); } - + protected abstract T decode(BitString reader); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java index 4c9a2569..af80d78e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java @@ -3,6 +3,7 @@ import java.util.Collection; import java.util.function.Predicate; import java.util.stream.Collectors; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.ValidationException; public abstract class DataType { @@ -35,6 +36,14 @@ public void setDirty(Object[] values, int index, boolean dirty) { // pass } + public void encode(BitString writer, Object[] values, int index) { + throw new UnsupportedOperationException("type does not permit bit string encoding"); + } + + public void decode(BitString reader, Object[] values, int index) { + throw new UnsupportedOperationException("type does not permit bit string decoding"); + } + @SuppressWarnings("unchecked") public final T get(Object[] values, int index) { T value = (T) values[index]; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java index abe64edc..ec3b68e6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java @@ -3,13 +3,13 @@ import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.datatype.AbstractEncodableBitStringDataType; +import com.iab.gpp.encoder.datatype.DataType; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.field.FieldNames; -abstract class AbstractBase64Segment & FieldKey> extends AbstractLazilyEncodableSegment> { +abstract class AbstractBase64Segment & FieldKey> extends AbstractLazilyEncodableSegment { protected AbstractBase64Segment(FieldNames fieldNames) { super(fieldNames); @@ -24,7 +24,7 @@ protected final CharSequence doEncode() { BitString bitString = new BitString(); int size = fieldNames.size(); for (int i = 0; i < size; i++) { - AbstractEncodableBitStringDataType field = get(i); + DataType field = get(i); if (field != null) { field.encode(bitString, values, i); } else { @@ -41,7 +41,7 @@ protected final void doDecode(CharSequence encodedString) { BitString bitString = decodeBitString(encodedString); int size = fieldNames.size(); for (int i = 0; i < size; i++) { - AbstractEncodableBitStringDataType field = get(i); + DataType field = get(i); if (field != null) { try { field.decode(bitString, values, i); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java index a06c981d..5788ad36 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java @@ -7,7 +7,7 @@ import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.field.FieldNames; -abstract class AbstractLazilyEncodableSegment & FieldKey, T extends DataType> extends EncodableSegment { +abstract class AbstractLazilyEncodableSegment & FieldKey> extends EncodableSegment { protected static final Predicate nullableBooleanAsTwoBitIntegerValidator = (n -> n >= 0 && n <= 2); protected static final Predicate nonNullableBooleanAsTwoBitIntegerValidator = (n -> n >= 1 && n <= 2); @@ -37,7 +37,7 @@ public final E resolveKey(FieldKey fieldName) { return fieldNames.resolveKey(fieldName); } - protected final void initialize(E key, T value) { + protected final void initialize(E key, DataType value) { Integer index = fieldNames.getIndex(key); if (index == null) { throw new IllegalArgumentException("invalid key "+ key); @@ -45,12 +45,11 @@ protected final void initialize(E key, T value) { types[index] = value; } - @SuppressWarnings("unchecked") - protected final T get(int index) { - return (T) types[index]; + protected final DataType get(int index) { + return (DataType) types[index]; } - protected final T get(E key) { + protected final DataType get(E key) { Integer index = fieldNames.getIndex(key); if (index != null) { return get(index); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java index dfab46f0..018d2d91 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java @@ -1,13 +1,12 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.DataType; import com.iab.gpp.encoder.datatype.UnencodableCharacter; import com.iab.gpp.encoder.datatype.UnencodableInteger; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.field.UspV1Field; import com.iab.gpp.encoder.section.UspV1; -public final class UspV1CoreSegment extends AbstractLazilyEncodableSegment> { +public final class UspV1CoreSegment extends AbstractLazilyEncodableSegment { public UspV1CoreSegment() { super(UspV1Field.USPV1_CORE_SEGMENT_FIELD_NAMES); diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java index 58c2ea26..8d24d925 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.datatype; -import java.util.Arrays; import java.util.Set; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListEncoderTest.java index 7a395c21..9a980509 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListEncoderTest.java @@ -6,8 +6,6 @@ import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; -import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerListEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; From 6a11348129c93a4609ae02c93c2030394fe62884 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 10 Feb 2026 10:33:38 -0500 Subject: [PATCH 64/86] migrate to fields --- .../iab/gpp/encoder/datatype/DataType.java | 7 +- .../com/iab/gpp/encoder/field/FieldKey.java | 17 +++- .../com/iab/gpp/encoder/field/FieldNames.java | 8 ++ .../iab/gpp/encoder/field/HeaderV1Field.java | 22 +++-- .../iab/gpp/encoder/field/TcfCaV1Field.java | 69 ++++++++++------ .../iab/gpp/encoder/field/TcfEuV2Field.java | 82 ++++++++++++------- .../com/iab/gpp/encoder/field/UsCaField.java | 66 ++++++++++----- .../com/iab/gpp/encoder/field/UsCoField.java | 62 +++++++++----- .../com/iab/gpp/encoder/field/UsCtField.java | 63 +++++++++----- .../com/iab/gpp/encoder/field/UsDeField.java | 67 ++++++++++----- .../com/iab/gpp/encoder/field/UsFlField.java | 52 ++++++++---- .../com/iab/gpp/encoder/field/UsIaField.java | 66 ++++++++++----- .../com/iab/gpp/encoder/field/UsMtField.java | 66 ++++++++++----- .../com/iab/gpp/encoder/field/UsNatField.java | 72 +++++++++++----- .../com/iab/gpp/encoder/field/UsNeField.java | 66 ++++++++++----- .../com/iab/gpp/encoder/field/UsNhField.java | 66 ++++++++++----- .../com/iab/gpp/encoder/field/UsNjField.java | 66 ++++++++++----- .../com/iab/gpp/encoder/field/UsOrField.java | 66 ++++++++++----- .../com/iab/gpp/encoder/field/UsTnField.java | 66 ++++++++++----- .../com/iab/gpp/encoder/field/UsTxField.java | 66 ++++++++++----- .../com/iab/gpp/encoder/field/UsUtField.java | 52 ++++++++---- .../com/iab/gpp/encoder/field/UsVaField.java | 49 ++++++++--- .../com/iab/gpp/encoder/field/UspV1Field.java | 24 ++++-- .../segment/AbstractBase64Segment.java | 8 +- .../AbstractLazilyEncodableSegment.java | 38 ++------- .../encoder/segment/HeaderV1CoreSegment.java | 3 - .../encoder/segment/TcfCaV1CoreSegment.java | 17 ---- .../TcfCaV1DisclosedVendorsSegment.java | 2 - .../TcfCaV1PublisherPurposesSegment.java | 21 ----- .../encoder/segment/TcfEuV2CoreSegment.java | 21 +---- .../TcfEuV2PublisherPurposesSegment.java | 21 ----- .../segment/TcfEuV2VendorsAllowedSegment.java | 2 - .../TcfEuV2VendorsDisclosedSegment.java | 2 - .../gpp/encoder/segment/UsCaCoreSegment.java | 24 ------ .../gpp/encoder/segment/UsCaGpcSegment.java | 3 - .../gpp/encoder/segment/UsCoCoreSegment.java | 21 ----- .../gpp/encoder/segment/UsCoGpcSegment.java | 3 - .../gpp/encoder/segment/UsCtCoreSegment.java | 22 ----- .../gpp/encoder/segment/UsCtGpcSegment.java | 3 - .../gpp/encoder/segment/UsDeCoreSegment.java | 25 ------ .../gpp/encoder/segment/UsDeGpcSegment.java | 3 - .../gpp/encoder/segment/UsFlCoreSegment.java | 24 ------ .../gpp/encoder/segment/UsIaCoreSegment.java | 24 ------ .../gpp/encoder/segment/UsIaGpcSegment.java | 3 - .../gpp/encoder/segment/UsMtCoreSegment.java | 24 ------ .../gpp/encoder/segment/UsMtGpcSegment.java | 3 - .../gpp/encoder/segment/UsNatCoreSegment.java | 32 -------- .../gpp/encoder/segment/UsNatGpcSegment.java | 3 - .../gpp/encoder/segment/UsNeCoreSegment.java | 24 ------ .../gpp/encoder/segment/UsNeGpcSegment.java | 3 - .../gpp/encoder/segment/UsNhCoreSegment.java | 24 ------ .../gpp/encoder/segment/UsNhGpcSegment.java | 3 - .../gpp/encoder/segment/UsNjCoreSegment.java | 24 ------ .../gpp/encoder/segment/UsNjGpcSegment.java | 3 - .../gpp/encoder/segment/UsOrCoreSegment.java | 24 ------ .../gpp/encoder/segment/UsOrGpcSegment.java | 3 - .../gpp/encoder/segment/UsTnCoreSegment.java | 24 ------ .../gpp/encoder/segment/UsTnGpcSegment.java | 3 - .../gpp/encoder/segment/UsTxCoreSegment.java | 24 ------ .../gpp/encoder/segment/UsTxGpcSegment.java | 3 - .../gpp/encoder/segment/UsUtCoreSegment.java | 24 ------ .../gpp/encoder/segment/UsVaCoreSegment.java | 22 ----- .../gpp/encoder/segment/UspV1CoreSegment.java | 4 - 63 files changed, 880 insertions(+), 924 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java index af80d78e..92cd1e99 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java @@ -2,9 +2,12 @@ import java.util.Collection; import java.util.function.Predicate; +import java.util.function.Supplier; import java.util.stream.Collectors; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.ValidationException; +import com.iab.gpp.encoder.field.FieldKey; +import com.iab.gpp.encoder.segment.EncodableSegment; public abstract class DataType { @@ -36,11 +39,11 @@ public void setDirty(Object[] values, int index, boolean dirty) { // pass } - public void encode(BitString writer, Object[] values, int index) { + public & FieldKey> void encode(BitString writer, Object[] values, int index, EncodableSegment segment) { throw new UnsupportedOperationException("type does not permit bit string encoding"); } - public void decode(BitString reader, Object[] values, int index) { + public & FieldKey> void decode(BitString reader, Object[] values, int index, EncodableSegment segment) { throw new UnsupportedOperationException("type does not permit bit string decoding"); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java index c425bd6d..81297d4e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java @@ -1,6 +1,21 @@ package com.iab.gpp.encoder.field; +import java.util.function.Predicate; +import com.iab.gpp.encoder.datatype.DataType; +import com.iab.gpp.encoder.datatype.FixedIntegerList; + public interface FieldKey { String getName(); - + DataType getType(); + + public static final Predicate nullableBooleanAsTwoBitIntegerValidator = (n -> n >= 0 && n <= 2); + public static final Predicate nonNullableBooleanAsTwoBitIntegerValidator = (n -> n >= 1 && n <= 2); + public static final Predicate nullableBooleanAsTwoBitIntegerListValidator = (l -> { + for (int n : l) { + if (n < 0 || n > 2) { + return false; + } + } + return true; + }); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java index 69822878..6577d237 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java @@ -1,22 +1,26 @@ package com.iab.gpp.encoder.field; import java.util.LinkedHashMap; +import com.iab.gpp.encoder.datatype.DataType; public final class FieldNames & FieldKey> { private final E[] keys; private final LinkedHashMap map; private final Integer[] indices; + private final DataType[] types; @SafeVarargs FieldNames(E... keys) { this.keys = keys; this.map = new LinkedHashMap<>(); this.indices = new Integer[keys[0].getClass().getEnumConstants().length]; + this.types = new DataType[keys.length]; for (int i = 0; i < keys.length; i++) { E key = keys[i]; this.map.put(key, key); this.indices[key.ordinal()] = i; + this.types[i] = key.getType(); } } @@ -28,6 +32,10 @@ public E get(int i) { return keys[i]; } + public DataType getType(int i) { + return types[i]; + } + public Integer getIndex(E key) { if (key == null) { return null; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java index 91066c76..48121a1c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java @@ -1,14 +1,21 @@ package com.iab.gpp.encoder.field; +import com.iab.gpp.encoder.datatype.DataType; +import com.iab.gpp.encoder.datatype.EncodableFibonacciIntegerRange; +import com.iab.gpp.encoder.datatype.EncodableFixedInteger; +import com.iab.gpp.encoder.section.HeaderV1; + public enum HeaderV1Field implements FieldKey { - ID("Id"), - VERSION("Version"), - SECTION_IDS("SectionIds"); + ID("Id", new EncodableFixedInteger(6, HeaderV1.ID)), + VERSION("Version", new EncodableFixedInteger(6, HeaderV1.VERSION)), + SECTION_IDS("SectionIds", new EncodableFibonacciIntegerRange()); - private String name; + private final String name; + private final DataType type; - HeaderV1Field(String name) { + HeaderV1Field(String name, DataType type) { this.name = name; + this.type = type; } @Override @@ -16,6 +23,11 @@ public String getName() { return name; } + @Override + public DataType getType() { + return type; + } + //@formatter:off public static final FieldNames HEADER_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( HeaderV1Field.ID, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java index 6fbe5960..e94ddb56 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java @@ -1,37 +1,50 @@ package com.iab.gpp.encoder.field; +import com.iab.gpp.encoder.datatype.DataType; +import com.iab.gpp.encoder.datatype.EncodableArrayOfFixedIntegerRanges; +import com.iab.gpp.encoder.datatype.EncodableBoolean; +import com.iab.gpp.encoder.datatype.EncodableDatetime; +import com.iab.gpp.encoder.datatype.EncodableFixedBitfield; +import com.iab.gpp.encoder.datatype.EncodableFixedInteger; +import com.iab.gpp.encoder.datatype.EncodableFixedString; +import com.iab.gpp.encoder.datatype.EncodableFlexibleBitfield; +import com.iab.gpp.encoder.datatype.EncodableOptimizedFixedRange; +import com.iab.gpp.encoder.section.TcfCaV1; + public enum TcfCaV1Field implements FieldKey { - VERSION("Version"), - CREATED("Created"), - LAST_UPDATED("LastUpdated"), - CMP_ID("CmpId"), - CMP_VERSION("CmpVersion"), - CONSENT_SCREEN("ConsentScreen"), - CONSENT_LANGUAGE("ConsentLanguage"), - VENDOR_LIST_VERSION("VendorListVersion"), - TCF_POLICY_VERSION("TcfPolicyVersion"), - USE_NON_STANDARD_STACKS("UseNonStandardStacks"), - SPECIAL_FEATURE_EXPRESS_CONSENT("SpecialFeatureExpressConsent"), - PURPOSES_EXPRESS_CONSENT("PurposesExpressConsent"), - PURPOSES_IMPLIED_CONSENT("PurposesImpliedConsent"), - VENDOR_EXPRESS_CONSENT("VendorExpressConsent"), - VENDOR_IMPLIED_CONSENT("VendorImpliedConsent"), - PUB_RESTRICTIONS("PubRestrictions"), + VERSION("Version", new EncodableFixedInteger(6, TcfCaV1.VERSION)), + CREATED("Created", new EncodableDatetime()), + LAST_UPDATED("LastUpdated", new EncodableDatetime()), + CMP_ID("CmpId", new EncodableFixedInteger(12, 0)), + CMP_VERSION("CmpVersion", new EncodableFixedInteger(12, 0)), + CONSENT_SCREEN("ConsentScreen", new EncodableFixedInteger(6, 0)), + CONSENT_LANGUAGE("ConsentLanguage", new EncodableFixedString(2, "EN")), + VENDOR_LIST_VERSION("VendorListVersion", new EncodableFixedInteger(12, 0)), + TCF_POLICY_VERSION("TcfPolicyVersion", new EncodableFixedInteger(6, 2)), + USE_NON_STANDARD_STACKS("UseNonStandardStacks", new EncodableBoolean(false)), + SPECIAL_FEATURE_EXPRESS_CONSENT("SpecialFeatureExpressConsent", new EncodableFixedBitfield(12)), + PURPOSES_EXPRESS_CONSENT("PurposesExpressConsent", new EncodableFixedBitfield(24)), + PURPOSES_IMPLIED_CONSENT("PurposesImpliedConsent", new EncodableFixedBitfield(24)), + VENDOR_EXPRESS_CONSENT("VendorExpressConsent", new EncodableOptimizedFixedRange()), + VENDOR_IMPLIED_CONSENT("VendorImpliedConsent", new EncodableOptimizedFixedRange()), + PUB_RESTRICTIONS("PubRestrictions", new EncodableArrayOfFixedIntegerRanges(6, 2, false)), - PUB_PURPOSES_SEGMENT_TYPE("PubPurposesSegmentType"), - PUB_PURPOSES_EXPRESS_CONSENT("PubPurposesExpressConsent"), - PUB_PURPOSES_IMPLIED_CONSENT("PubPurposesImpliedConsent"), - NUM_CUSTOM_PURPOSES("NumCustomPurposes"), - CUSTOM_PURPOSES_EXPRESS_CONSENT("CustomPurposesExpressConsent"), - CUSTOM_PURPOSES_IMPLIED_CONSENT("CustomPurposesImpliedConsent"), + PUB_PURPOSES_SEGMENT_TYPE("PubPurposesSegmentType", new EncodableFixedInteger(3, 3)), + PUB_PURPOSES_EXPRESS_CONSENT("PubPurposesExpressConsent", new EncodableFixedBitfield(24)), + PUB_PURPOSES_IMPLIED_CONSENT("PubPurposesImpliedConsent", new EncodableFixedBitfield(24)), + NUM_CUSTOM_PURPOSES("NumCustomPurposes", new EncodableFixedInteger(6, 0)), + CUSTOM_PURPOSES_EXPRESS_CONSENT("CustomPurposesExpressConsent", new EncodableFlexibleBitfield(segment -> (Integer) segment.getFieldValue(TcfCaV1Field.NUM_CUSTOM_PURPOSES))), + CUSTOM_PURPOSES_IMPLIED_CONSENT("CustomPurposesImpliedConsent", new EncodableFlexibleBitfield(segment -> (Integer) segment.getFieldValue(TcfCaV1Field.NUM_CUSTOM_PURPOSES))), - DISCLOSED_VENDORS_SEGMENT_TYPE("DisclosedVendorsSegmentType"), - DISCLOSED_VENDORS("DisclosedVendors"); + DISCLOSED_VENDORS_SEGMENT_TYPE("DisclosedVendorsSegmentType", new EncodableFixedInteger(3, 1)), + DISCLOSED_VENDORS("DisclosedVendors", new EncodableOptimizedFixedRange()); - private String name; + private final String name; + private final DataType type; - TcfCaV1Field(String name) { + TcfCaV1Field(String name, DataType type) { this.name = name; + this.type = type; } @Override @@ -39,6 +52,10 @@ public String getName() { return name; } + @Override + public DataType getType() { + return type; + } //@formatter:off public static final FieldNames TCFCAV1_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( TcfCaV1Field.VERSION, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java index 5150a6db..ee4411e0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java @@ -1,40 +1,55 @@ package com.iab.gpp.encoder.field; +import java.util.function.IntSupplier; +import com.iab.gpp.encoder.datatype.DataType; +import com.iab.gpp.encoder.datatype.EncodableArrayOfFixedIntegerRanges; +import com.iab.gpp.encoder.datatype.EncodableBoolean; +import com.iab.gpp.encoder.datatype.EncodableDatetime; +import com.iab.gpp.encoder.datatype.EncodableFixedBitfield; +import com.iab.gpp.encoder.datatype.EncodableFixedInteger; +import com.iab.gpp.encoder.datatype.EncodableFixedString; +import com.iab.gpp.encoder.datatype.EncodableFlexibleBitfield; +import com.iab.gpp.encoder.datatype.EncodableOptimizedFixedRange; +import com.iab.gpp.encoder.section.TcfEuV2; +import com.iab.gpp.encoder.segment.TcfEuV2PublisherPurposesSegment; + public enum TcfEuV2Field implements FieldKey { - VERSION("Version"), - CREATED("Created"), - LAST_UPDATED("LastUpdated"), - CMP_ID("CmpId"), - CMP_VERSION("CmpVersion"), - CONSENT_SCREEN("ConsentScreen"), - CONSENT_LANGUAGE("ConsentLanguage"), - VENDOR_LIST_VERSION("VendorListVersion"), - POLICY_VERSION("PolicyVersion"), - IS_SERVICE_SPECIFIC("IsServiceSpecific"), - USE_NON_STANDARD_STACKS("UseNonStandardStacks"), - SPECIAL_FEATURE_OPTINS("SpecialFeatureOptins"), - PURPOSE_CONSENTS("PurposeConsents"), - PURPOSE_LEGITIMATE_INTERESTS("PurposeLegitimateInterests"), - PURPOSE_ONE_TREATMENT("PurposeOneTreatment"), - PUBLISHER_COUNTRY_CODE("PublisherCountryCode"), - VENDOR_CONSENTS("VendorConsents"), - VENDOR_LEGITIMATE_INTERESTS("VendorLegitimateInterests"), - PUBLISHER_RESTRICTIONS("PublisherRestrictions"), - PUBLISHER_PURPOSES_SEGMENT_TYPE("PublisherPurposesSegmentType"), - PUBLISHER_CONSENTS("PublisherConsents"), - PUBLISHER_LEGITIMATE_INTERESTS("PublisherLegitimateInterests"), - NUM_CUSTOM_PURPOSES("NumCustomPurposes"), - PUBLISHER_CUSTOM_CONSENTS("PublisherCustomConsents"), - PUBLISHER_CUSTOM_LEGITIMATE_INTERESTS("PublisherCustomLegitimateInterests"), - VENDORS_ALLOWED_SEGMENT_TYPE("VendorsAllowedSegmentType"), - VENDORS_ALLOWED("VendorsAllowed"), - VENDORS_DISCLOSED_SEGMENT_TYPE("VendorsDisclosedSegmentType"), - VENDORS_DISCLOSED("VendorsDisclosed"); + VERSION("Version", new EncodableFixedInteger(6, TcfEuV2.VERSION)), + CREATED("Created", new EncodableDatetime()), + LAST_UPDATED("LastUpdated", new EncodableDatetime()), + CMP_ID("CmpId", new EncodableFixedInteger(12, 0)), + CMP_VERSION("CmpVersion", new EncodableFixedInteger(12, 0)), + CONSENT_SCREEN("ConsentScreen", new EncodableFixedInteger(6, 0)), + CONSENT_LANGUAGE("ConsentLanguage", new EncodableFixedString(2, "EN")), + VENDOR_LIST_VERSION("VendorListVersion", new EncodableFixedInteger(12, 0)), + POLICY_VERSION("PolicyVersion", new EncodableFixedInteger(6, 2)), + IS_SERVICE_SPECIFIC("IsServiceSpecific", new EncodableBoolean(false)), + USE_NON_STANDARD_STACKS("UseNonStandardStacks", new EncodableBoolean(false)), + SPECIAL_FEATURE_OPTINS("SpecialFeatureOptins", new EncodableFixedBitfield(12)), + PURPOSE_CONSENTS("PurposeConsents", new EncodableFixedBitfield(24)), + PURPOSE_LEGITIMATE_INTERESTS("PurposeLegitimateInterests", new EncodableFixedBitfield(24)), + PURPOSE_ONE_TREATMENT("PurposeOneTreatment", new EncodableBoolean(false)), + PUBLISHER_COUNTRY_CODE("PublisherCountryCode", new EncodableFixedString(2, "AA")), + VENDOR_CONSENTS("VendorConsents", new EncodableOptimizedFixedRange()), + VENDOR_LEGITIMATE_INTERESTS("VendorLegitimateInterests", new EncodableOptimizedFixedRange()), + PUBLISHER_RESTRICTIONS("PublisherRestrictions", new EncodableArrayOfFixedIntegerRanges(6, 2, false)), + PUBLISHER_PURPOSES_SEGMENT_TYPE("PublisherPurposesSegmentType", new EncodableFixedInteger(3, 3)), + PUBLISHER_CONSENTS("PublisherConsents", new EncodableFixedBitfield(24)), + PUBLISHER_LEGITIMATE_INTERESTS("PublisherLegitimateInterests", new EncodableFixedBitfield(24)), + NUM_CUSTOM_PURPOSES("NumCustomPurposes", new EncodableFixedInteger(6, 0)), + PUBLISHER_CUSTOM_CONSENTS("PublisherCustomConsents", new EncodableFlexibleBitfield(segment -> (Integer) segment.getFieldValue(TcfEuV2Field.NUM_CUSTOM_PURPOSES))), + PUBLISHER_CUSTOM_LEGITIMATE_INTERESTS("PublisherCustomLegitimateInterests", new EncodableFlexibleBitfield(segment -> (Integer) segment.getFieldValue(TcfEuV2Field.NUM_CUSTOM_PURPOSES))), + VENDORS_ALLOWED_SEGMENT_TYPE("VendorsAllowedSegmentType", new EncodableFixedInteger(3, 2)), + VENDORS_ALLOWED("VendorsAllowed", new EncodableOptimizedFixedRange()), + VENDORS_DISCLOSED_SEGMENT_TYPE("VendorsDisclosedSegmentType", new EncodableFixedInteger(3, 1)), + VENDORS_DISCLOSED("VendorsDisclosed", new EncodableOptimizedFixedRange()); - private String name; + private final String name; + private final DataType type; - TcfEuV2Field(String name) { + TcfEuV2Field(String name, DataType type) { this.name = name; + this.type = type; } @Override @@ -42,6 +57,11 @@ public String getName() { return name; } + @Override + public DataType getType() { + return type; + } + //@formatter:off public static final FieldNames TCFEUV2_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( TcfEuV2Field.VERSION, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java index 2dd3a51c..22a26588 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java @@ -1,27 +1,48 @@ package com.iab.gpp.encoder.field; +import com.iab.gpp.encoder.datatype.DataType; +import com.iab.gpp.encoder.datatype.EncodableBoolean; +import com.iab.gpp.encoder.datatype.EncodableFixedInteger; +import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; +import com.iab.gpp.encoder.datatype.UnencodableBoolean; +import com.iab.gpp.encoder.section.UsCa; + public enum UsCaField implements FieldKey { - VERSION("Version"), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), - SHARING_OPT_OUT_NOTICE("SharingOptOutNotice"), - SENSITIVE_DATA_LIMIT_USE_NOTICE("SensitiveDataLimitUseNotice"), - SALE_OPT_OUT("SaleOptOut"), - SHARING_OPT_OUT("SharingOptOut"), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), - PERSONAL_DATA_CONSENTS("PersonalDataConsents"), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"), - - GPC_SEGMENT_TYPE("GpcSegmentType"), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded"), - GPC("Gpc"); - - private String name; - - UsCaField(String name) { + VERSION("Version", new EncodableFixedInteger(6, UsCa.VERSION)), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SHARING_OPT_OUT_NOTICE("SharingOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_LIMIT_USE_NOTICE("SensitiveDataLimitUseNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT("SaleOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SHARING_OPT_OUT("SharingOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", + new EncodableFixedIntegerList(2, 9) + .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList(2, 2) + .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + PERSONAL_DATA_CONSENTS("PersonalDataConsents", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", + new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + + GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger(2, 1)), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean(true)), + GPC("Gpc", new EncodableBoolean(false)); + + private final String name; + private final DataType type; + + UsCaField(String name, DataType type) { this.name = name; + this.type = type; } @Override @@ -29,6 +50,11 @@ public String getName() { return name; } + @Override + public DataType getType() { + return type; + } + //@formatter:off public static final FieldNames USCA_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsCaField.VERSION, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java index a2366deb..0db47e94 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java @@ -1,26 +1,45 @@ package com.iab.gpp.encoder.field; +import com.iab.gpp.encoder.datatype.DataType; +import com.iab.gpp.encoder.datatype.EncodableBoolean; +import com.iab.gpp.encoder.datatype.EncodableFixedInteger; +import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; +import com.iab.gpp.encoder.datatype.UnencodableBoolean; +import com.iab.gpp.encoder.section.UsCo; + public enum UsCoField implements FieldKey { - VERSION("Version"), - SHARING_NOTICE("SharingNotice"), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), - SALE_OPT_OUT("SaleOptOut"), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"), - - GPC_SEGMENT_TYPE("GpcSegmentType"), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded"), - GPC("Gpc"); - - private String name; - - UsCoField(String name) { + VERSION("Version", new EncodableFixedInteger(6, UsCo.VERSION)), + SHARING_NOTICE("SharingNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT("SaleOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", new EncodableFixedIntegerList(2, 7) + .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", + new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + + GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger(2, 1)), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean(true)), + GPC("Gpc", new EncodableBoolean(false)); + + private final String name; + private final DataType type; + + UsCoField(String name, DataType type) { this.name = name; + this.type = type; } @Override @@ -28,6 +47,11 @@ public String getName() { return name; } + @Override + public DataType getType() { + return type; + } + //@formatter:off public static final FieldNames USCO_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsCoField.VERSION, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java index dd605815..180c2e2a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java @@ -1,26 +1,46 @@ package com.iab.gpp.encoder.field; +import com.iab.gpp.encoder.datatype.DataType; +import com.iab.gpp.encoder.datatype.EncodableBoolean; +import com.iab.gpp.encoder.datatype.EncodableFixedInteger; +import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; +import com.iab.gpp.encoder.datatype.UnencodableBoolean; +import com.iab.gpp.encoder.section.UsCt; + public enum UsCtField implements FieldKey { - VERSION("Version"), - SHARING_NOTICE("SharingNotice"), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), - SALE_OPT_OUT("SaleOptOut"), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"), - - GPC_SEGMENT_TYPE("GpcSegmentType"), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded"), - GPC("Gpc"); - - private String name; - - UsCtField(String name) { + VERSION("Version", new EncodableFixedInteger(6, UsCt.VERSION)), + SHARING_NOTICE("SharingNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT("SaleOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", + new EncodableFixedIntegerList(2, 8) + .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList(2, 3) + .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", + new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + + GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger(2, 1)), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean(true)), + GPC("Gpc", new EncodableBoolean(false)); + + private final String name; + private final DataType type; + + UsCtField(String name, DataType type) { this.name = name; + this.type = type; } @Override @@ -28,6 +48,11 @@ public String getName() { return name; } + @Override + public DataType getType() { + return type; + } + //@formatter:off public static final FieldNames USCT_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsCtField.VERSION, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java index e8fe98b2..c3c68162 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java @@ -1,27 +1,49 @@ package com.iab.gpp.encoder.field; +import com.iab.gpp.encoder.datatype.DataType; +import com.iab.gpp.encoder.datatype.EncodableBoolean; +import com.iab.gpp.encoder.datatype.EncodableFixedInteger; +import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; +import com.iab.gpp.encoder.datatype.UnencodableBoolean; +import com.iab.gpp.encoder.section.UsDe; + public enum UsDeField implements FieldKey { - VERSION("Version"), - PROCESSING_NOTICE("ProcessingNotice"), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), - SALE_OPT_OUT("SaleOptOut"), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), - ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent"), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"), - - GPC_SEGMENT_TYPE("GpcSegmentType"), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded"), - GPC("Gpc"); - - private String name; - - UsDeField(String name) { + VERSION("Version", new EncodableFixedInteger(6, UsDe.VERSION)), + PROCESSING_NOTICE("ProcessingNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT("SaleOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", + new EncodableFixedIntegerList(2, 9) + .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", + new EncodableFixedIntegerList(2, 5) + .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", + new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + + GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger(2, 1)), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean(true)), + GPC("Gpc", new EncodableBoolean(false)); + + private final String name; + private final DataType type; + + UsDeField(String name, DataType type) { this.name = name; + this.type = type; } @Override @@ -29,6 +51,11 @@ public String getName() { return name; } + @Override + public DataType getType() { + return type; + } + //@formatter:off public static final FieldNames USDE_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsDeField.VERSION, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java index 170e7ff9..01404196 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java @@ -1,23 +1,42 @@ package com.iab.gpp.encoder.field; +import com.iab.gpp.encoder.datatype.DataType; +import com.iab.gpp.encoder.datatype.EncodableFixedInteger; +import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; +import com.iab.gpp.encoder.section.UsFl; + public enum UsFlField implements FieldKey { - VERSION("Version"), - PROCESSING_NOTICE("ProcessingNotice"), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), - SALE_OPT_OUT("SaleOptOut"), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), - ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent"), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"); + VERSION("Version", new EncodableFixedInteger(6, UsFl.VERSION)), + PROCESSING_NOTICE("ProcessingNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT("SaleOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", + new EncodableFixedIntegerList(2, 8) + .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList(2, 3) + .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", + new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - private String name; + private final String name; + private final DataType type; - UsFlField(String name) { + UsFlField(String name, DataType type) { this.name = name; + this.type = type; } @Override @@ -25,6 +44,11 @@ public String getName() { return name; } + @Override + public DataType getType() { + return type; + } + //@formatter:off public static final FieldNames USFL_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsFlField.VERSION, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java index 3b3bb7cb..cf24cb62 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java @@ -1,27 +1,48 @@ package com.iab.gpp.encoder.field; +import com.iab.gpp.encoder.datatype.DataType; +import com.iab.gpp.encoder.datatype.EncodableBoolean; +import com.iab.gpp.encoder.datatype.EncodableFixedInteger; +import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; +import com.iab.gpp.encoder.datatype.UnencodableBoolean; +import com.iab.gpp.encoder.section.UsIa; + public enum UsIaField implements FieldKey { - VERSION("Version"), - PROCESSING_NOTICE("ProcessingNotice"), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), - SENSITIVE_DATA_OPT_OUT_NOTICE("SensitiveDataOptOutNotice"), - SALE_OPT_OUT("SaleOptOut"), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"), - - GPC_SEGMENT_TYPE("GpcSegmentType"), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded"), - GPC("Gpc"); - - private String name; - - UsIaField(String name) { + VERSION("Version", new EncodableFixedInteger(6, UsIa.VERSION)), + PROCESSING_NOTICE("ProcessingNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_OPT_OUT_NOTICE("SensitiveDataOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT("SaleOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", + new EncodableFixedIntegerList(2, 8) + .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", + new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + + GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger(2, 1)), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean(true)), + GPC("Gpc", new EncodableBoolean(false)); + + private final String name; + private final DataType type; + + UsIaField(String name, DataType type) { this.name = name; + this.type = type; } @Override @@ -29,6 +50,11 @@ public String getName() { return name; } + @Override + public DataType getType() { + return type; + } + //@formatter:off public static final FieldNames USIA_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsIaField.VERSION, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java index 07694812..bd776b28 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java @@ -1,27 +1,48 @@ package com.iab.gpp.encoder.field; +import com.iab.gpp.encoder.datatype.DataType; +import com.iab.gpp.encoder.datatype.EncodableBoolean; +import com.iab.gpp.encoder.datatype.EncodableFixedInteger; +import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; +import com.iab.gpp.encoder.datatype.UnencodableBoolean; +import com.iab.gpp.encoder.section.UsMt; + public enum UsMtField implements FieldKey { - VERSION("Version"), - SHARING_NOTICE("SharingNotice"), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), - SALE_OPT_OUT("SaleOptOut"), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), - ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent"), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"), - - GPC_SEGMENT_TYPE("GpcSegmentType"), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded"), - GPC("Gpc"); - - private String name; - - UsMtField(String name) { + VERSION("Version", new EncodableFixedInteger(6, UsMt.VERSION)), + SHARING_NOTICE("SharingNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT("SaleOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", + new EncodableFixedIntegerList(2, 8) + .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList(2, 3) + .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", + new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + + GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger(2, 1)), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean(true)), + GPC("Gpc", new EncodableBoolean(false)); + + private final String name; + private final DataType type; + + UsMtField(String name, DataType type) { this.name = name; + this.type = type; } @Override @@ -29,6 +50,11 @@ public String getName() { return name; } + @Override + public DataType getType() { + return type; + } + //@formatter:off public static final FieldNames USMT_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsMtField.VERSION, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java index de9c3822..d418f28a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java @@ -1,31 +1,56 @@ package com.iab.gpp.encoder.field; +import com.iab.gpp.encoder.datatype.DataType; +import com.iab.gpp.encoder.datatype.EncodableBoolean; +import com.iab.gpp.encoder.datatype.EncodableFixedInteger; +import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; +import com.iab.gpp.encoder.datatype.UnencodableBoolean; +import com.iab.gpp.encoder.section.UsNat; + public enum UsNatField implements FieldKey { - VERSION("Version"), - SHARING_NOTICE("SharingNotice"), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), - SHARING_OPT_OUT_NOTICE("SharingOptOutNotice"), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), - SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE("SensitiveDataProcessingOptOutNotice"), - SENSITIVE_DATA_LIMIT_USE_NOTICE("SensitiveDataLimitUseNotice"), - SALE_OPT_OUT("SaleOptOut"), - SHARING_OPT_OUT("SharingOptOut"), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), - PERSONAL_DATA_CONSENTS("PersonalDataConsents"), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"), + VERSION("Version", new EncodableFixedInteger(6, UsNat.VERSION)), + SHARING_NOTICE("SharingNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SHARING_OPT_OUT_NOTICE("SharingOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE("SensitiveDataProcessingOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_LIMIT_USE_NOTICE("SensitiveDataLimitUseNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT("SaleOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SHARING_OPT_OUT("SharingOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", + new EncodableFixedIntegerList(2, 16) + .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList(2, 3) + .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + PERSONAL_DATA_CONSENTS("PersonalDataConsents", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", + new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), - GPC_SEGMENT_TYPE("GpcSegmentType"), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded"), - GPC("Gpc"); + GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger(2, 1)), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean(true)), + GPC("Gpc", new EncodableBoolean(false)); - private String name; + private final String name; + private final DataType type; - UsNatField(String name) { + UsNatField(String name, DataType type) { this.name = name; + this.type = type; } @Override @@ -33,6 +58,11 @@ public String getName() { return name; } + @Override + public DataType getType() { + return type; + } + //@formatter:off public static final FieldNames USNAT_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsNatField.VERSION, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java index a556270d..2b2e8193 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java @@ -1,27 +1,48 @@ package com.iab.gpp.encoder.field; +import com.iab.gpp.encoder.datatype.DataType; +import com.iab.gpp.encoder.datatype.EncodableBoolean; +import com.iab.gpp.encoder.datatype.EncodableFixedInteger; +import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; +import com.iab.gpp.encoder.datatype.UnencodableBoolean; +import com.iab.gpp.encoder.section.UsNe; + public enum UsNeField implements FieldKey { - VERSION("Version"), - PROCESSING_NOTICE("ProcessingNotice"), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), - SALE_OPT_OUT("SaleOptOut"), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), - ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent"), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"), - - GPC_SEGMENT_TYPE("GpcSegmentType"), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded"), - GPC("Gpc"); - - private String name; - - UsNeField(String name) { + VERSION("Version", new EncodableFixedInteger(6, UsNe.VERSION)), + PROCESSING_NOTICE("ProcessingNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT("SaleOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", + new EncodableFixedIntegerList(2, 8) + .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", + new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + + GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger(2, 1)), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean(true)), + GPC("Gpc", new EncodableBoolean(false)); + + private final String name; + private final DataType type; + + UsNeField(String name, DataType type) { this.name = name; + this.type = type; } @Override @@ -29,6 +50,11 @@ public String getName() { return name; } + @Override + public DataType getType() { + return type; + } + //@formatter:off public static final FieldNames USNE_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsNeField.VERSION, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java index 7247c62e..c803daa3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java @@ -1,27 +1,48 @@ package com.iab.gpp.encoder.field; +import com.iab.gpp.encoder.datatype.DataType; +import com.iab.gpp.encoder.datatype.EncodableBoolean; +import com.iab.gpp.encoder.datatype.EncodableFixedInteger; +import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; +import com.iab.gpp.encoder.datatype.UnencodableBoolean; +import com.iab.gpp.encoder.section.UsNh; + public enum UsNhField implements FieldKey { - VERSION("Version"), - PROCESSING_NOTICE("ProcessingNotice"), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), - SALE_OPT_OUT("SaleOptOut"), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), - ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent"), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"), - - GPC_SEGMENT_TYPE("GpcSegmentType"), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded"), - GPC("Gpc"); - - private String name; - - UsNhField(String name) { + VERSION("Version", new EncodableFixedInteger(6, UsNh.VERSION)), + PROCESSING_NOTICE("ProcessingNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT("SaleOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", + new EncodableFixedIntegerList(2, 8) + .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList(2, 3) + .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", + new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + + GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger(2, 1)), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean(true)), + GPC("Gpc", new EncodableBoolean(false)); + + private final String name; + private final DataType type; + + UsNhField(String name, DataType type) { this.name = name; + this.type = type; } @Override @@ -29,6 +50,11 @@ public String getName() { return name; } + @Override + public DataType getType() { + return type; + } + //@formatter:off public static final FieldNames USNH_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsNhField.VERSION, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java index d47d15b1..0ad6704d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java @@ -1,27 +1,48 @@ package com.iab.gpp.encoder.field; +import com.iab.gpp.encoder.datatype.DataType; +import com.iab.gpp.encoder.datatype.EncodableBoolean; +import com.iab.gpp.encoder.datatype.EncodableFixedInteger; +import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; +import com.iab.gpp.encoder.datatype.UnencodableBoolean; +import com.iab.gpp.encoder.section.UsNj; + public enum UsNjField implements FieldKey { - VERSION("Version"), - PROCESSING_NOTICE("ProcessingNotice"), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), - SALE_OPT_OUT("SaleOptOut"), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), - ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent"), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"), - - GPC_SEGMENT_TYPE("GpcSegmentType"), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded"), - GPC("Gpc"); - - private String name; - - UsNjField(String name) { + VERSION("Version", new EncodableFixedInteger(6, UsNj.VERSION)), + PROCESSING_NOTICE("ProcessingNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT("SaleOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", + new EncodableFixedIntegerList(2, 10) + .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList(2, 5) + .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", + new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + + GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger(2, 1)), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean(true)), + GPC("Gpc", new EncodableBoolean(false)); + + private final String name; + private final DataType type; + + UsNjField(String name, DataType type) { this.name = name; + this.type = type; } @Override @@ -29,6 +50,11 @@ public String getName() { return name; } + @Override + public DataType getType() { + return type; + } + //@formatter:off public static final FieldNames USNJ_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsNjField.VERSION, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java index f2faafa2..b9e180d1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java @@ -1,27 +1,48 @@ package com.iab.gpp.encoder.field; +import com.iab.gpp.encoder.datatype.DataType; +import com.iab.gpp.encoder.datatype.EncodableBoolean; +import com.iab.gpp.encoder.datatype.EncodableFixedInteger; +import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; +import com.iab.gpp.encoder.datatype.UnencodableBoolean; +import com.iab.gpp.encoder.section.UsOr; + public enum UsOrField implements FieldKey { - VERSION("Version"), - PROCESSING_NOTICE("ProcessingNotice"), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), - SALE_OPT_OUT("SaleOptOut"), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), - ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent"), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"), - - GPC_SEGMENT_TYPE("GpcSegmentType"), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded"), - GPC("Gpc"); - - private String name; - - UsOrField(String name) { + VERSION("Version", new EncodableFixedInteger(6, UsOr.VERSION)), + PROCESSING_NOTICE("ProcessingNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT("SaleOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", + new EncodableFixedIntegerList(2, 11) + .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList(2, 3) + .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", + new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + + GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger(2, 1)), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean(true)), + GPC("Gpc", new EncodableBoolean(false)); + + private final String name; + private final DataType type; + + UsOrField(String name, DataType type) { this.name = name; + this.type = type; } @Override @@ -29,6 +50,11 @@ public String getName() { return name; } + @Override + public DataType getType() { + return type; + } + //@formatter:off public static final FieldNames USOR_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsOrField.VERSION, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java index 09477e53..86a07343 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java @@ -1,27 +1,48 @@ package com.iab.gpp.encoder.field; +import com.iab.gpp.encoder.datatype.DataType; +import com.iab.gpp.encoder.datatype.EncodableBoolean; +import com.iab.gpp.encoder.datatype.EncodableFixedInteger; +import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; +import com.iab.gpp.encoder.datatype.UnencodableBoolean; +import com.iab.gpp.encoder.section.UsTn; + public enum UsTnField implements FieldKey { - VERSION("Version"), - PROCESSING_NOTICE("ProcessingNotice"), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), - SALE_OPT_OUT("SaleOptOut"), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), - ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent"), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"), - - GPC_SEGMENT_TYPE("GpcSegmentType"), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded"), - GPC("Gpc"); - - private String name; - - UsTnField(String name) { + VERSION("Version", new EncodableFixedInteger(6, UsTn.VERSION)), + PROCESSING_NOTICE("ProcessingNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT("SaleOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", + new EncodableFixedIntegerList(2, 8) + .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", + new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + + GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger(2, 1)), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean(true)), + GPC("Gpc", new EncodableBoolean(false)); + + private final String name; + private final DataType type; + + UsTnField(String name, DataType type) { this.name = name; + this.type = type; } @Override @@ -29,6 +50,11 @@ public String getName() { return name; } + @Override + public DataType getType() { + return type; + } + //@formatter:off public static final FieldNames USTN_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsTnField.VERSION, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java index f441fe3b..fafff9d5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java @@ -1,27 +1,48 @@ package com.iab.gpp.encoder.field; +import com.iab.gpp.encoder.datatype.DataType; +import com.iab.gpp.encoder.datatype.EncodableBoolean; +import com.iab.gpp.encoder.datatype.EncodableFixedInteger; +import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; +import com.iab.gpp.encoder.datatype.UnencodableBoolean; +import com.iab.gpp.encoder.section.UsTx; + public enum UsTxField implements FieldKey { - VERSION("Version"), - PROCESSING_NOTICE("ProcessingNotice"), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), - SALE_OPT_OUT("SaleOptOut"), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), - ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent"), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"), - - GPC_SEGMENT_TYPE("GpcSegmentType"), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded"), - GPC("Gpc"); - - private String name; - - UsTxField(String name) { + VERSION("Version", new EncodableFixedInteger(6, UsTx.VERSION)), + PROCESSING_NOTICE("ProcessingNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT("SaleOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", + new EncodableFixedIntegerList(2, 8) + .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", + new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + + GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger(2, 1)), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean(true)), + GPC("Gpc", new EncodableBoolean(false)); + + private final String name; + private final DataType type; + + UsTxField(String name, DataType type) { this.name = name; + this.type = type; } @Override @@ -29,6 +50,11 @@ public String getName() { return name; } + @Override + public DataType getType() { + return type; + } + //@formatter:off public static final FieldNames USTX_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsTxField.VERSION, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java index 3f7c3ab3..0abf43de 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java @@ -1,23 +1,42 @@ package com.iab.gpp.encoder.field; +import com.iab.gpp.encoder.datatype.DataType; +import com.iab.gpp.encoder.datatype.EncodableFixedInteger; +import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; +import com.iab.gpp.encoder.section.UsUt; + public enum UsUtField implements FieldKey { - VERSION("Version"), - SHARING_NOTICE("SharingNotice"), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), - SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE("SensitiveDataProcessingOptOutNotice"), - SALE_OPT_OUT("SaleOptOut"), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"); + VERSION("Version", new EncodableFixedInteger(6, UsUt.VERSION)), + SHARING_NOTICE("SharingNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE("SensitiveDataProcessingOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT("SaleOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", + new EncodableFixedIntegerList(2, 8) + .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", + new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - private String name; + private final String name; + private final DataType type; - UsUtField(String name) { + UsUtField(String name, DataType type) { this.name = name; + this.type = type; } @Override @@ -25,6 +44,11 @@ public String getName() { return name; } + @Override + public DataType getType() { + return type; + } + //@formatter:off public static final FieldNames USUT_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsUtField.VERSION, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java index b6c1fd59..5d8c3462 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java @@ -1,22 +1,40 @@ package com.iab.gpp.encoder.field; +import com.iab.gpp.encoder.datatype.DataType; +import com.iab.gpp.encoder.datatype.EncodableFixedInteger; +import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; +import com.iab.gpp.encoder.section.UsVa; + public enum UsVaField implements FieldKey { - VERSION("Version"), - SHARING_NOTICE("SharingNotice"), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), - SALE_OPT_OUT("SaleOptOut"), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"); + VERSION("Version", new EncodableFixedInteger(6, UsVa.VERSION)), + SHARING_NOTICE("SharingNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT("SaleOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", + new EncodableFixedIntegerList(2, 8) + .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", + new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - private String name; + private final String name; + private final DataType type; - UsVaField(String name) { + UsVaField(String name, DataType type) { this.name = name; + this.type = type; } @Override @@ -24,6 +42,11 @@ public String getName() { return name; } + @Override + public DataType getType() { + return type; + } + //@formatter:off public static final FieldNames USVA_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsVaField.VERSION, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java index d7a9a96c..e05ab623 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java @@ -1,15 +1,22 @@ package com.iab.gpp.encoder.field; +import com.iab.gpp.encoder.datatype.DataType; +import com.iab.gpp.encoder.datatype.UnencodableCharacter; +import com.iab.gpp.encoder.datatype.UnencodableInteger; +import com.iab.gpp.encoder.section.UspV1; + public enum UspV1Field implements FieldKey { - VERSION("Version"), - NOTICE("Notice"), - OPT_OUT_SALE("OptOutSale"), - LSPA_COVERED("LspaCovered"); + VERSION("Version", new UnencodableInteger(UspV1.VERSION)), + NOTICE("Notice", new UnencodableCharacter('-', (v -> v == 'Y' || v == 'N' || v == '-'))), + OPT_OUT_SALE("OptOutSale", new UnencodableCharacter('-', (v -> v == 'Y' || v == 'N' || v == '-'))), + LSPA_COVERED("LspaCovered", new UnencodableCharacter('-', (v -> v == 'Y' || v == 'N' || v == '-'))); - private String name; + private final String name; + private final DataType type; - UspV1Field(String name) { + UspV1Field(String name, DataType type) { this.name = name; + this.type = type; } @Override @@ -17,6 +24,11 @@ public String getName() { return name; } + @Override + public DataType getType() { + return type; + } + //@formatter:off public static final FieldNames USPV1_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UspV1Field.VERSION, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java index ec3b68e6..75c967f0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java @@ -24,9 +24,9 @@ protected final CharSequence doEncode() { BitString bitString = new BitString(); int size = fieldNames.size(); for (int i = 0; i < size; i++) { - DataType field = get(i); + DataType field = fieldNames.getType(i); if (field != null) { - field.encode(bitString, values, i); + field.encode(bitString, values, i, this); } else { throw new EncodingException("Field not found: '" + fieldNames.get(i) + "'"); } @@ -41,10 +41,10 @@ protected final void doDecode(CharSequence encodedString) { BitString bitString = decodeBitString(encodedString); int size = fieldNames.size(); for (int i = 0; i < size; i++) { - DataType field = get(i); + DataType field = fieldNames.getType(i); if (field != null) { try { - field.decode(bitString, values, i); + field.decode(bitString, values, i, this); } catch (Exception e) { throw new DecodingException("Unable to decode " + fieldNames.get(i), e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java index 5788ad36..65eb1f6c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java @@ -9,27 +9,13 @@ abstract class AbstractLazilyEncodableSegment & FieldKey> extends EncodableSegment { - protected static final Predicate nullableBooleanAsTwoBitIntegerValidator = (n -> n >= 0 && n <= 2); - protected static final Predicate nonNullableBooleanAsTwoBitIntegerValidator = (n -> n >= 1 && n <= 2); - protected static final Predicate nullableBooleanAsTwoBitIntegerListValidator = (l -> { - for (int n : l) { - if (n < 0 || n > 2) { - return false; - } - } - return true; - }); - protected final FieldNames fieldNames; - private final Object[] types; protected final Object[] values; private boolean dirty; protected AbstractLazilyEncodableSegment(FieldNames fieldNames) { this.fieldNames = fieldNames; this.values = new Object[fieldNames.size()]; - // TODO: move to FieldNames - this.types = new Object[fieldNames.size()]; } @Override @@ -37,29 +23,17 @@ public final E resolveKey(FieldKey fieldName) { return fieldNames.resolveKey(fieldName); } - protected final void initialize(E key, DataType value) { - Integer index = fieldNames.getIndex(key); - if (index == null) { - throw new IllegalArgumentException("invalid key "+ key); - } - types[index] = value; - } - - protected final DataType get(int index) { - return (DataType) types[index]; - } - protected final DataType get(E key) { Integer index = fieldNames.getIndex(key); if (index != null) { - return get(index); + return fieldNames.getType(index); } return null; } @Override public final boolean hasField(E key) { - return get(key) != null; + return fieldNames.getIndex(key) != null; } @Override @@ -69,7 +43,7 @@ public final boolean isDirty() { } int size = fieldNames.size(); for (int i = 0; i < size; i++) { - if (get(i).isDirty(values, i)) { + if (fieldNames.getType(i).isDirty(values, i)) { return true; } } @@ -81,7 +55,7 @@ public final void setDirty(boolean dirty) { this.dirty = dirty; int size = fieldNames.size(); for (int i = 0; i < size; i++) { - get(i).setDirty(values, i, dirty); + fieldNames.getType(i).setDirty(values, i, dirty); } } @@ -94,7 +68,7 @@ public final Object getFieldValue(E fieldName) { protected final Object getFieldValueUnsafe(E fieldName) { Integer index = fieldNames.getIndex(fieldName); if (index != null) { - return get(index).get(values, index); + return fieldNames.getType(index).get(values, index); } else { throw new InvalidFieldException("Invalid field: '" + fieldName + "'"); } @@ -109,7 +83,7 @@ public final void setFieldValue(E fieldName, Object value) { protected final void setFieldValueUnsafe(E fieldName, Object value) { Integer index = fieldNames.getIndex(fieldName); if (index != null) { - get(index).set(values, index, value); + fieldNames.getType(index).set(values, index, value); dirty = true; } else { throw new InvalidFieldException(fieldName + " not found"); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java index 3e926695..a50f0a81 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java @@ -9,9 +9,6 @@ public final class HeaderV1CoreSegment extends AbstractBase64Segment { public UsCaCoreSegment() { super(UsCaField.USCA_CORE_SEGMENT_FIELD_NAMES); - initialize(UsCaField.VERSION, new EncodableFixedInteger(6, UsCa.VERSION)); - initialize(UsCaField.SALE_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsCaField.SHARING_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsCaField.SENSITIVE_DATA_LIMIT_USE_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsCaField.SALE_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsCaField.SHARING_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsCaField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, 9) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - initialize(UsCaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 2) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - initialize(UsCaField.PERSONAL_DATA_CONSENTS, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsCaField.MSPA_COVERED_TRANSACTION, - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - initialize(UsCaField.MSPA_OPT_OUT_OPTION_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsCaField.MSPA_SERVICE_PROVIDER_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java index 47813843..a9d8e4a0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java @@ -9,9 +9,6 @@ public final class UsCaGpcSegment extends AbstractBase64Segment { public UsCaGpcSegment() { super(UsCaField.USCA_GPC_SEGMENT_FIELD_NAMES); - initialize(UsCaField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - initialize(UsCaField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); - initialize(UsCaField.GPC, new EncodableBoolean(false)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java index 2fdd170c..329c26a2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java @@ -9,27 +9,6 @@ public final class UsCoCoreSegment extends AbstractBase64Segment { public UsCoCoreSegment() { super(UsCoField.USCO_CORE_SEGMENT_FIELD_NAMES); - initialize(UsCoField.VERSION, new EncodableFixedInteger(6, UsCo.VERSION)); - initialize(UsCoField.SHARING_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsCoField.SALE_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsCoField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsCoField.SALE_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsCoField.TARGETED_ADVERTISING_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsCoField.SENSITIVE_DATA_PROCESSING, new EncodableFixedIntegerList(2, 7) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - initialize(UsCoField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsCoField.MSPA_COVERED_TRANSACTION, - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - initialize(UsCoField.MSPA_OPT_OUT_OPTION_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsCoField.MSPA_SERVICE_PROVIDER_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java index 884e6b0e..ad343874 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java @@ -9,9 +9,6 @@ public final class UsCoGpcSegment extends AbstractBase64Segment { public UsCoGpcSegment() { super(UsCoField.USCO_GPC_SEGMENT_FIELD_NAMES); - initialize(UsCoField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - initialize(UsCoField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); - initialize(UsCoField.GPC, new EncodableBoolean(false)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java index bfda454c..6b58c80a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java @@ -9,28 +9,6 @@ public final class UsCtCoreSegment extends AbstractBase64Segment { public UsCtCoreSegment() { super(UsCtField.USCT_CORE_SEGMENT_FIELD_NAMES); - initialize(UsCtField.VERSION, new EncodableFixedInteger(6, UsCt.VERSION)); - initialize(UsCtField.SHARING_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsCtField.SALE_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsCtField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsCtField.SALE_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsCtField.TARGETED_ADVERTISING_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsCtField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, 8) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - initialize(UsCtField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 3) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - initialize(UsCtField.MSPA_COVERED_TRANSACTION, - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - initialize(UsCtField.MSPA_OPT_OUT_OPTION_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsCtField.MSPA_SERVICE_PROVIDER_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java index b6aea217..218e3082 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java @@ -9,9 +9,6 @@ public final class UsCtGpcSegment extends AbstractBase64Segment { public UsCtGpcSegment() { super(UsCtField.USCT_GPC_SEGMENT_FIELD_NAMES); - initialize(UsCtField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - initialize(UsCtField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); - initialize(UsCtField.GPC, new EncodableBoolean(false)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java index 45404a78..2bd301bc 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java @@ -9,31 +9,6 @@ public final class UsDeCoreSegment extends AbstractBase64Segment { public UsDeCoreSegment() { super(UsDeField.USDE_CORE_SEGMENT_FIELD_NAMES); - initialize(UsDeField.VERSION, new EncodableFixedInteger(6, UsDe.VERSION)); - initialize(UsDeField.PROCESSING_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsDeField.SALE_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsDeField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsDeField.SALE_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsDeField.TARGETED_ADVERTISING_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsDeField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, 9) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - initialize(UsDeField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - new EncodableFixedIntegerList(2, 5) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - initialize(UsDeField.ADDITIONAL_DATA_PROCESSING_CONSENT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsDeField.MSPA_COVERED_TRANSACTION, - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - initialize(UsDeField.MSPA_OPT_OUT_OPTION_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsDeField.MSPA_SERVICE_PROVIDER_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java index f23ae86c..e8557d3d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java @@ -9,9 +9,6 @@ public final class UsDeGpcSegment extends AbstractBase64Segment { public UsDeGpcSegment() { super(UsDeField.USDE_GPC_SEGMENT_FIELD_NAMES); - initialize(UsDeField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - initialize(UsDeField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); - initialize(UsDeField.GPC, new EncodableBoolean(false)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java index 315fbdcb..f60992a8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java @@ -9,30 +9,6 @@ public final class UsFlCoreSegment extends AbstractBase64Segment { public UsFlCoreSegment() { super(UsFlField.USFL_CORE_SEGMENT_FIELD_NAMES); - initialize(UsFlField.VERSION, new EncodableFixedInteger(6, UsFl.VERSION)); - initialize(UsFlField.PROCESSING_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsFlField.SALE_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsFlField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsFlField.SALE_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsFlField.TARGETED_ADVERTISING_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsFlField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, 8) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - initialize(UsFlField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 3) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - initialize(UsFlField.ADDITIONAL_DATA_PROCESSING_CONSENT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsFlField.MSPA_COVERED_TRANSACTION, - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - initialize(UsFlField.MSPA_OPT_OUT_OPTION_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsFlField.MSPA_SERVICE_PROVIDER_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java index 2e39d723..69c5e93c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java @@ -9,30 +9,6 @@ public final class UsIaCoreSegment extends AbstractBase64Segment { public UsIaCoreSegment() { super(UsIaField.USIA_CORE_SEGMENT_FIELD_NAMES); - initialize(UsIaField.VERSION, new EncodableFixedInteger(6, UsIa.VERSION)); - initialize(UsIaField.PROCESSING_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsIaField.SALE_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsIaField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsIaField.SENSITIVE_DATA_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsIaField.SALE_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsIaField.TARGETED_ADVERTISING_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsIaField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, 8) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - initialize(UsIaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsIaField.MSPA_COVERED_TRANSACTION, - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - initialize(UsIaField.MSPA_OPT_OUT_OPTION_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsIaField.MSPA_SERVICE_PROVIDER_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java index 99588b5d..e8dcd7a6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java @@ -9,9 +9,6 @@ public final class UsIaGpcSegment extends AbstractBase64Segment { public UsIaGpcSegment() { super(UsIaField.USIA_GPC_SEGMENT_FIELD_NAMES); - initialize(UsIaField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - initialize(UsIaField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); - initialize(UsIaField.GPC, new EncodableBoolean(false)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java index 1a9c8099..128e0ac7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java @@ -9,30 +9,6 @@ public final class UsMtCoreSegment extends AbstractBase64Segment { public UsMtCoreSegment() { super(UsMtField.USMT_CORE_SEGMENT_FIELD_NAMES); - initialize(UsMtField.VERSION, new EncodableFixedInteger(6, UsMt.VERSION)); - initialize(UsMtField.SHARING_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsMtField.SALE_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsMtField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsMtField.SALE_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsMtField.TARGETED_ADVERTISING_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsMtField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, 8) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - initialize(UsMtField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 3) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - initialize(UsMtField.ADDITIONAL_DATA_PROCESSING_CONSENT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsMtField.MSPA_COVERED_TRANSACTION, - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - initialize(UsMtField.MSPA_OPT_OUT_OPTION_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsMtField.MSPA_SERVICE_PROVIDER_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java index 7caa3f4a..2146b166 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java @@ -9,9 +9,6 @@ public final class UsMtGpcSegment extends AbstractBase64Segment { public UsMtGpcSegment() { super(UsMtField.USMT_GPC_SEGMENT_FIELD_NAMES); - initialize(UsMtField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - initialize(UsMtField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); - initialize(UsMtField.GPC, new EncodableBoolean(false)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java index 442fb138..10b81165 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java @@ -10,38 +10,6 @@ public final class UsNatCoreSegment extends AbstractBase64Segment { public UsNatCoreSegment() { super(UsNatField.USNAT_CORE_SEGMENT_FIELD_NAMES); - initialize(UsNatField.VERSION, new EncodableFixedInteger(6, UsNat.VERSION)); - initialize(UsNatField.SHARING_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNatField.SALE_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNatField.SHARING_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNatField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNatField.SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNatField.SENSITIVE_DATA_LIMIT_USE_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNatField.SALE_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNatField.SHARING_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNatField.TARGETED_ADVERTISING_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNatField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, 16) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - initialize(UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 3) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - initialize(UsNatField.PERSONAL_DATA_CONSENTS, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNatField.MSPA_COVERED_TRANSACTION, - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNatField.MSPA_OPT_OUT_OPTION_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNatField.MSPA_SERVICE_PROVIDER_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java index f7ab9ba6..7d54a916 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java @@ -9,9 +9,6 @@ public final class UsNatGpcSegment extends AbstractBase64Segment { public UsNatGpcSegment() { super(UsNatField.USNAT_GPC_SEGMENT_FIELD_NAMES); - initialize(UsNatField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - initialize(UsNatField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); - initialize(UsNatField.GPC, new EncodableBoolean(false)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java index a1eda150..51ef86f9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java @@ -9,30 +9,6 @@ public final class UsNeCoreSegment extends AbstractBase64Segment { public UsNeCoreSegment() { super(UsNeField.USNE_CORE_SEGMENT_FIELD_NAMES); - initialize(UsNeField.VERSION, new EncodableFixedInteger(6, UsNe.VERSION)); - initialize(UsNeField.PROCESSING_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNeField.SALE_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNeField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNeField.SALE_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNeField.TARGETED_ADVERTISING_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNeField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, 8) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - initialize(UsNeField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNeField.ADDITIONAL_DATA_PROCESSING_CONSENT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNeField.MSPA_COVERED_TRANSACTION, - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNeField.MSPA_OPT_OUT_OPTION_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNeField.MSPA_SERVICE_PROVIDER_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java index 01456505..f656c321 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java @@ -9,9 +9,6 @@ public final class UsNeGpcSegment extends AbstractBase64Segment { public UsNeGpcSegment() { super(UsNeField.USNE_GPC_SEGMENT_FIELD_NAMES); - initialize(UsNeField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - initialize(UsNeField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); - initialize(UsNeField.GPC, new EncodableBoolean(false)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java index 1376ec01..2d4bf1d4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java @@ -9,30 +9,6 @@ public final class UsNhCoreSegment extends AbstractBase64Segment { public UsNhCoreSegment() { super(UsNhField.USNH_CORE_SEGMENT_FIELD_NAMES); - initialize(UsNhField.VERSION, new EncodableFixedInteger(6, UsNh.VERSION)); - initialize(UsNhField.PROCESSING_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNhField.SALE_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNhField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNhField.SALE_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNhField.TARGETED_ADVERTISING_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNhField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, 8) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - initialize(UsNhField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 3) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - initialize(UsNhField.ADDITIONAL_DATA_PROCESSING_CONSENT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNhField.MSPA_COVERED_TRANSACTION, - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNhField.MSPA_OPT_OUT_OPTION_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNhField.MSPA_SERVICE_PROVIDER_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java index 9abeebb8..c7594924 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java @@ -9,9 +9,6 @@ public final class UsNhGpcSegment extends AbstractBase64Segment { public UsNhGpcSegment() { super(UsNhField.USNH_GPC_SEGMENT_FIELD_NAMES); - initialize(UsNhField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - initialize(UsNhField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); - initialize(UsNhField.GPC, new EncodableBoolean(false)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java index f8809920..5329d6f5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java @@ -9,30 +9,6 @@ public final class UsNjCoreSegment extends AbstractBase64Segment { public UsNjCoreSegment() { super(UsNjField.USNJ_CORE_SEGMENT_FIELD_NAMES); - initialize(UsNjField.VERSION, new EncodableFixedInteger(6, UsNj.VERSION)); - initialize(UsNjField.PROCESSING_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNjField.SALE_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNjField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNjField.SALE_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNjField.TARGETED_ADVERTISING_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNjField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, 10) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - initialize(UsNjField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 5) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - initialize(UsNjField.ADDITIONAL_DATA_PROCESSING_CONSENT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNjField.MSPA_COVERED_TRANSACTION, - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNjField.MSPA_OPT_OUT_OPTION_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNjField.MSPA_SERVICE_PROVIDER_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java index c651e912..32cee7bf 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java @@ -9,9 +9,6 @@ public final class UsNjGpcSegment extends AbstractBase64Segment { public UsNjGpcSegment() { super(UsNjField.USNJ_GPC_SEGMENT_FIELD_NAMES); - initialize(UsNjField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - initialize(UsNjField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); - initialize(UsNjField.GPC, new EncodableBoolean(false)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java index c06f095d..3b421ffb 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java @@ -9,30 +9,6 @@ public final class UsOrCoreSegment extends AbstractBase64Segment { public UsOrCoreSegment() { super(UsOrField.USOR_CORE_SEGMENT_FIELD_NAMES); - initialize(UsOrField.VERSION, new EncodableFixedInteger(6, UsOr.VERSION)); - initialize(UsOrField.PROCESSING_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsOrField.SALE_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsOrField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsOrField.SALE_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsOrField.TARGETED_ADVERTISING_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsOrField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, 11) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - initialize(UsOrField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 3) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - initialize(UsOrField.ADDITIONAL_DATA_PROCESSING_CONSENT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsOrField.MSPA_COVERED_TRANSACTION, - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - initialize(UsOrField.MSPA_OPT_OUT_OPTION_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsOrField.MSPA_SERVICE_PROVIDER_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java index aaacbc33..422dcd50 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java @@ -9,9 +9,6 @@ public final class UsOrGpcSegment extends AbstractBase64Segment { public UsOrGpcSegment() { super(UsOrField.USOR_GPC_SEGMENT_FIELD_NAMES); - initialize(UsOrField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - initialize(UsOrField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); - initialize(UsOrField.GPC, new EncodableBoolean(false)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java index b4749be5..80d5c955 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java @@ -9,30 +9,6 @@ public final class UsTnCoreSegment extends AbstractBase64Segment { public UsTnCoreSegment() { super(UsTnField.USTN_CORE_SEGMENT_FIELD_NAMES); - initialize(UsTnField.VERSION, new EncodableFixedInteger(6, UsTn.VERSION)); - initialize(UsTnField.PROCESSING_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsTnField.SALE_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsTnField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsTnField.SALE_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsTnField.TARGETED_ADVERTISING_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsTnField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, 8) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - initialize(UsTnField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsTnField.ADDITIONAL_DATA_PROCESSING_CONSENT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsTnField.MSPA_COVERED_TRANSACTION, - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - initialize(UsTnField.MSPA_OPT_OUT_OPTION_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsTnField.MSPA_SERVICE_PROVIDER_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java index 26c63cbe..b7c389d8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java @@ -9,9 +9,6 @@ public final class UsTnGpcSegment extends AbstractBase64Segment { public UsTnGpcSegment() { super(UsTnField.USTN_GPC_SEGMENT_FIELD_NAMES); - initialize(UsTnField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - initialize(UsTnField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); - initialize(UsTnField.GPC, new EncodableBoolean(false)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java index 93cb427d..37c8a1d4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java @@ -9,30 +9,6 @@ public final class UsTxCoreSegment extends AbstractBase64Segment { public UsTxCoreSegment() { super(UsTxField.USTX_CORE_SEGMENT_FIELD_NAMES); - initialize(UsTxField.VERSION, new EncodableFixedInteger(6, UsTx.VERSION)); - initialize(UsTxField.PROCESSING_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsTxField.SALE_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsTxField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsTxField.SALE_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsTxField.TARGETED_ADVERTISING_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsTxField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, 8) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - initialize(UsTxField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsTxField.ADDITIONAL_DATA_PROCESSING_CONSENT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsTxField.MSPA_COVERED_TRANSACTION, - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - initialize(UsTxField.MSPA_OPT_OUT_OPTION_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsTxField.MSPA_SERVICE_PROVIDER_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java index bdeff998..d24c7f27 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java @@ -9,8 +9,5 @@ public final class UsTxGpcSegment extends AbstractBase64Segment { public UsTxGpcSegment() { super(UsTxField.USTX_GPC_SEGMENT_FIELD_NAMES); - initialize(UsTxField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - initialize(UsTxField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); - initialize(UsTxField.GPC, new EncodableBoolean(false)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java index 7200ca99..1befef19 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java @@ -9,30 +9,6 @@ public final class UsUtCoreSegment extends AbstractBase64Segment { public UsUtCoreSegment() { super(UsUtField.USUT_CORE_SEGMENT_FIELD_NAMES); - initialize(UsUtField.VERSION, new EncodableFixedInteger(6, UsUt.VERSION)); - initialize(UsUtField.SHARING_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsUtField.SALE_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsUtField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsUtField.SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsUtField.SALE_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsUtField.TARGETED_ADVERTISING_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsUtField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, 8) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - initialize(UsUtField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsUtField.MSPA_COVERED_TRANSACTION, - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - initialize(UsUtField.MSPA_OPT_OUT_OPTION_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsUtField.MSPA_SERVICE_PROVIDER_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java index 57cc14ab..2cf487c9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java @@ -9,28 +9,6 @@ public final class UsVaCoreSegment extends AbstractBase64Segment { public UsVaCoreSegment() { super(UsVaField.USVA_CORE_SEGMENT_FIELD_NAMES); - initialize(UsVaField.VERSION, new EncodableFixedInteger(6, UsVa.VERSION)); - initialize(UsVaField.SHARING_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsVaField.SALE_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsVaField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsVaField.SALE_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsVaField.TARGETED_ADVERTISING_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsVaField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, 8) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - initialize(UsVaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsVaField.MSPA_COVERED_TRANSACTION, - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - initialize(UsVaField.MSPA_OPT_OUT_OPTION_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsVaField.MSPA_SERVICE_PROVIDER_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java index 018d2d91..d4c193d7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java @@ -10,10 +10,6 @@ public final class UspV1CoreSegment extends AbstractLazilyEncodableSegment v == 'Y' || v == 'N' || v == '-'))); - initialize(UspV1Field.OPT_OUT_SALE, new UnencodableCharacter('-', (v -> v == 'Y' || v == 'N' || v == '-'))); - initialize(UspV1Field.LSPA_COVERED, new UnencodableCharacter('-', (v -> v == 'Y' || v == 'N' || v == '-'))); } @Override From 8d87d70b0ce41ef4247c4d8ed1247deef2fa0d5c Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 10 Feb 2026 13:17:30 -0500 Subject: [PATCH 65/86] fix dynamic sizing --- .../java/com/iab/gpp/encoder/GppModel.java | 38 +++++------ .../AbstractDirtyableBitStringDataType.java | 6 +- .../AbstractEncodableBitStringDataType.java | 21 +++--- .../iab/gpp/encoder/datatype/DataType.java | 12 +--- .../EncodableArrayOfFixedIntegerRanges.java | 8 ++- .../encoder/datatype/EncodableBoolean.java | 8 ++- .../encoder/datatype/EncodableDatetime.java | 8 ++- .../datatype/EncodableFibonacciInteger.java | 8 ++- .../EncodableFibonacciIntegerRange.java | 8 ++- .../datatype/EncodableFixedBitfield.java | 8 ++- .../datatype/EncodableFixedInteger.java | 16 +++-- .../datatype/EncodableFixedIntegerList.java | 12 ++-- .../datatype/EncodableFixedIntegerRange.java | 8 ++- .../datatype/EncodableFixedString.java | 8 ++- .../datatype/EncodableFlexibleBitfield.java | 18 ++--- .../EncodableOptimizedFixedRange.java | 8 ++- .../encoder/datatype/UnencodableBoolean.java | 8 ++- .../datatype/UnencodableCharacter.java | 5 +- .../encoder/datatype/UnencodableInteger.java | 4 +- .../com/iab/gpp/encoder/field/FieldKey.java | 2 +- .../com/iab/gpp/encoder/field/FieldNames.java | 9 +-- .../iab/gpp/encoder/field/HeaderV1Field.java | 12 ++-- .../iab/gpp/encoder/field/TcfCaV1Field.java | 54 +++++++-------- .../iab/gpp/encoder/field/TcfEuV2Field.java | 66 +++++++++---------- .../com/iab/gpp/encoder/field/UsCaField.java | 38 +++++------ .../com/iab/gpp/encoder/field/UsCoField.java | 35 +++++----- .../com/iab/gpp/encoder/field/UsCtField.java | 36 +++++----- .../com/iab/gpp/encoder/field/UsDeField.java | 38 +++++------ .../com/iab/gpp/encoder/field/UsFlField.java | 32 +++++---- .../com/iab/gpp/encoder/field/UsIaField.java | 37 +++++------ .../com/iab/gpp/encoder/field/UsMtField.java | 38 +++++------ .../com/iab/gpp/encoder/field/UsNatField.java | 46 +++++++------ .../com/iab/gpp/encoder/field/UsNeField.java | 37 +++++------ .../com/iab/gpp/encoder/field/UsNhField.java | 38 +++++------ .../com/iab/gpp/encoder/field/UsNjField.java | 38 +++++------ .../com/iab/gpp/encoder/field/UsOrField.java | 38 +++++------ .../com/iab/gpp/encoder/field/UsTnField.java | 37 +++++------ .../com/iab/gpp/encoder/field/UsTxField.java | 37 +++++------ .../com/iab/gpp/encoder/field/UsUtField.java | 31 +++++---- .../com/iab/gpp/encoder/field/UsVaField.java | 29 ++++---- .../com/iab/gpp/encoder/field/UspV1Field.java | 14 ++-- .../segment/AbstractBase64Segment.java | 4 +- .../AbstractLazilyEncodableSegment.java | 10 +-- .../gpp/encoder/segment/EncodableSegment.java | 2 + .../encoder/segment/HeaderV1CoreSegment.java | 3 - .../encoder/segment/TcfCaV1CoreSegment.java | 8 --- .../TcfCaV1DisclosedVendorsSegment.java | 2 - .../TcfCaV1PublisherPurposesSegment.java | 4 -- .../encoder/segment/TcfEuV2CoreSegment.java | 8 --- .../TcfEuV2PublisherPurposesSegment.java | 4 -- .../segment/TcfEuV2VendorsAllowedSegment.java | 2 - .../TcfEuV2VendorsDisclosedSegment.java | 2 - .../gpp/encoder/segment/UsCaCoreSegment.java | 3 - .../gpp/encoder/segment/UsCaGpcSegment.java | 3 - .../gpp/encoder/segment/UsCoCoreSegment.java | 3 - .../gpp/encoder/segment/UsCoGpcSegment.java | 3 - .../gpp/encoder/segment/UsCtCoreSegment.java | 3 - .../gpp/encoder/segment/UsCtGpcSegment.java | 3 - .../gpp/encoder/segment/UsDeCoreSegment.java | 3 - .../gpp/encoder/segment/UsDeGpcSegment.java | 3 - .../gpp/encoder/segment/UsFlCoreSegment.java | 3 - .../gpp/encoder/segment/UsIaCoreSegment.java | 3 - .../gpp/encoder/segment/UsIaGpcSegment.java | 3 - .../gpp/encoder/segment/UsMtCoreSegment.java | 3 - .../gpp/encoder/segment/UsMtGpcSegment.java | 3 - .../gpp/encoder/segment/UsNatCoreSegment.java | 3 - .../gpp/encoder/segment/UsNatGpcSegment.java | 3 - .../gpp/encoder/segment/UsNeCoreSegment.java | 3 - .../gpp/encoder/segment/UsNeGpcSegment.java | 3 - .../gpp/encoder/segment/UsNhCoreSegment.java | 3 - .../gpp/encoder/segment/UsNhGpcSegment.java | 3 - .../gpp/encoder/segment/UsNjCoreSegment.java | 3 - .../EncodableFixedIntegerRangeTest.java | 8 +-- .../EncodableOptimizedFixedRangeTest.java | 16 ++--- .../datatype/FixedIntegerListEncoderTest.java | 4 +- 75 files changed, 502 insertions(+), 589 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java index c21c4a9c..491bb6ec 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java @@ -179,79 +179,79 @@ public void clear() { } public TcfCaV1 getTcfCaV1Section() { - return (TcfCaV1) getSection(TcfCaV1.NAME); + return (TcfCaV1) getSection(TcfCaV1.ID); } public TcfEuV2 getTcfEuV2Section() { - return (TcfEuV2) getSection(TcfEuV2.NAME); + return (TcfEuV2) getSection(TcfEuV2.ID); } public UspV1 getUspV1Section() { - return (UspV1) getSection(UspV1.NAME); + return (UspV1) getSection(UspV1.ID); } public UsNat getUsNatSection() { - return (UsNat) getSection(UsNat.NAME); + return (UsNat) getSection(UsNat.ID); } public UsCa getUsCaSection() { - return (UsCa) getSection(UsCa.NAME); + return (UsCa) getSection(UsCa.ID); } public UsVa getUsVaSection() { - return (UsVa) getSection(UsVa.NAME); + return (UsVa) getSection(UsVa.ID); } public UsCo getUsCoSection() { - return (UsCo) getSection(UsCo.NAME); + return (UsCo) getSection(UsCo.ID); } public UsUt getUsUtSection() { - return (UsUt) getSection(UsUt.NAME); + return (UsUt) getSection(UsUt.ID); } public UsCt getUsCtSection() { - return (UsCt) getSection(UsCt.NAME); + return (UsCt) getSection(UsCt.ID); } public UsFl getUsFlSection() { - return (UsFl) getSection(UsFl.NAME); + return (UsFl) getSection(UsFl.ID); } public UsMt getUsMtSection() { - return (UsMt) getSection(UsMt.NAME); + return (UsMt) getSection(UsMt.ID); } public UsOr getUsOrSection() { - return (UsOr) getSection(UsOr.NAME); + return (UsOr) getSection(UsOr.ID); } public UsTx getUsTxSection() { - return (UsTx) getSection(UsTx.NAME); + return (UsTx) getSection(UsTx.ID); } public UsDe getUsDeSection() { - return (UsDe) getSection(UsDe.NAME); + return (UsDe) getSection(UsDe.ID); } public UsIa getUsIaSection() { - return (UsIa) getSection(UsIa.NAME); + return (UsIa) getSection(UsIa.ID); } public UsNe getUsNeSection() { - return (UsNe) getSection(UsNe.NAME); + return (UsNe) getSection(UsNe.ID); } public UsNh getUsNhSection() { - return (UsNh) getSection(UsNh.NAME); + return (UsNh) getSection(UsNh.ID); } public UsNj getUsNjSection() { - return (UsNj) getSection(UsNj.NAME); + return (UsNj) getSection(UsNj.ID); } public UsTn getUsTnSection() { - return (UsTn) getSection(UsTn.NAME); + return (UsTn) getSection(UsTn.ID); } public List getSectionIds() { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java index 5fdc05f0..24aa5c0b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java @@ -1,9 +1,11 @@ package com.iab.gpp.encoder.datatype; +import com.iab.gpp.encoder.field.FieldKey; + // This class is used to handle collection types. // It is important that we monitor the collections we return for changes. -public abstract class AbstractDirtyableBitStringDataType - extends AbstractEncodableBitStringDataType { +public abstract class AbstractDirtyableBitStringDataType & FieldKey, T extends Dirtyable> + extends AbstractEncodableBitStringDataType { @Override public boolean isDirty(Object[] values, int index) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java index 768e34d2..f2cb63d4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java @@ -1,25 +1,22 @@ package com.iab.gpp.encoder.datatype; -import java.util.function.Predicate; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.field.FieldKey; +import com.iab.gpp.encoder.segment.EncodableSegment; -public abstract class AbstractEncodableBitStringDataType extends DataType { - public AbstractEncodableBitStringDataType withValidator(Predicate validator) { - this.validator = validator; - return this; - } +public abstract class AbstractEncodableBitStringDataType & FieldKey, T> extends DataType { @Override - public final void encode(BitString writer, Object[] values, int index) { - encode(writer, get(values, index)); + public final void encode(BitString writer, Object[] values, int index, EncodableSegment segment) { + encode(writer, get(values, index), segment); } - protected abstract void encode(BitString writer, T value); + protected abstract void encode(BitString writer, T value, EncodableSegment segment); @Override - public final void decode(BitString reader, Object[] values, int index) { - values[index] = decode(reader); + public final void decode(BitString reader, Object[] values, int index, EncodableSegment segment) { + values[index] = decode(reader, segment); } - protected abstract T decode(BitString reader); + protected abstract T decode(BitString reader, EncodableSegment segment); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java index 92cd1e99..fc7a05aa 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java @@ -2,22 +2,16 @@ import java.util.Collection; import java.util.function.Predicate; -import java.util.function.Supplier; import java.util.stream.Collectors; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.ValidationException; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; -public abstract class DataType { +public abstract class DataType & FieldKey, T> { protected Predicate validator = null; - public DataType withValidator(Predicate validator) { - this.validator = validator; - return this; - } - protected final void validate(T v) { if (validator == null || validator.test(v)) { return; @@ -39,11 +33,11 @@ public void setDirty(Object[] values, int index, boolean dirty) { // pass } - public & FieldKey> void encode(BitString writer, Object[] values, int index, EncodableSegment segment) { + public void encode(BitString writer, Object[] values, int index, EncodableSegment segment) { throw new UnsupportedOperationException("type does not permit bit string encoding"); } - public & FieldKey> void decode(BitString reader, Object[] values, int index, EncodableSegment segment) { + public void decode(BitString reader, Object[] values, int index, EncodableSegment segment) { throw new UnsupportedOperationException("type does not permit bit string decoding"); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java index d46c589d..abd43f94 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java @@ -5,8 +5,10 @@ import com.iab.gpp.encoder.datatype.encoder.FixedIntegerRangeEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; +import com.iab.gpp.encoder.field.FieldKey; +import com.iab.gpp.encoder.segment.EncodableSegment; -public final class EncodableArrayOfFixedIntegerRanges extends AbstractDirtyableBitStringDataType> { +public final class EncodableArrayOfFixedIntegerRanges & FieldKey> extends AbstractDirtyableBitStringDataType> { private final int keyBitStringLength; private final int typeBitStringLength; @@ -22,7 +24,7 @@ protected DirtyableList initialize() { } @Override - protected void encode(BitString sb, DirtyableList entries) { + protected void encode(BitString sb, DirtyableList entries, EncodableSegment segment) { try { sb.writeInt(entries.size(), 12); for (RangeEntry entry : entries) { @@ -36,7 +38,7 @@ protected void encode(BitString sb, DirtyableList entries) { } @Override - protected DirtyableList decode(BitString reader) { + protected DirtyableList decode(BitString reader, EncodableSegment segment) { try { int size = reader.readInt(12); DirtyableList value = initialize(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java index 08465a8a..5e019b1e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java @@ -3,8 +3,10 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; +import com.iab.gpp.encoder.field.FieldKey; +import com.iab.gpp.encoder.segment.EncodableSegment; -public final class EncodableBoolean extends AbstractEncodableBitStringDataType { +public final class EncodableBoolean & FieldKey> extends AbstractEncodableBitStringDataType { private final Boolean initial; @@ -18,7 +20,7 @@ protected Boolean initialize() { } @Override - protected void encode(BitString builder, Boolean value){ + protected void encode(BitString builder, Boolean value, EncodableSegment segment){ try { builder.writeBoolean(value); } catch (Exception e) { @@ -27,7 +29,7 @@ protected void encode(BitString builder, Boolean value){ } @Override - protected Boolean decode(BitString reader) { + protected Boolean decode(BitString reader, EncodableSegment segment) { try { return reader.readBoolean(); } catch (Exception e) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java index 1977078e..2b1e143a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java @@ -5,8 +5,10 @@ import com.iab.gpp.encoder.datatype.encoder.DatetimeEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; +import com.iab.gpp.encoder.field.FieldKey; +import com.iab.gpp.encoder.segment.EncodableSegment; -public final class EncodableDatetime extends AbstractEncodableBitStringDataType { +public final class EncodableDatetime & FieldKey> extends AbstractEncodableBitStringDataType { @Override protected Instant initialize() { @@ -14,7 +16,7 @@ protected Instant initialize() { } @Override - protected void encode(BitString builder, Instant value) { + protected void encode(BitString builder, Instant value, EncodableSegment segment) { try { DatetimeEncoder.encode(builder, value); } catch (Exception e) { @@ -23,7 +25,7 @@ protected void encode(BitString builder, Instant value) { } @Override - protected Instant decode(BitString reader) { + protected Instant decode(BitString reader, EncodableSegment segment) { try { return DatetimeEncoder.decode(reader); } catch (Exception e) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java index 74a327a3..c0677d9a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java @@ -3,8 +3,10 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; +import com.iab.gpp.encoder.field.FieldKey; +import com.iab.gpp.encoder.segment.EncodableSegment; -public final class EncodableFibonacciInteger extends AbstractEncodableBitStringDataType { +public final class EncodableFibonacciInteger & FieldKey> extends AbstractEncodableBitStringDataType { private final Integer initial; @@ -18,7 +20,7 @@ protected Integer initialize() { } @Override - protected void encode(BitString builder, Integer value) { + protected void encode(BitString builder, Integer value, EncodableSegment segment) { try { builder.writeFibonacci(value); } catch (Exception e) { @@ -27,7 +29,7 @@ protected void encode(BitString builder, Integer value) { } @Override - protected Integer decode(BitString reader) { + protected Integer decode(BitString reader, EncodableSegment segment) { try { return reader.readFibonacci(); } catch (Exception e) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java index 96987231..f56780ad 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java @@ -5,8 +5,10 @@ import com.iab.gpp.encoder.datatype.encoder.FibonacciIntegerRangeEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; +import com.iab.gpp.encoder.field.FieldKey; +import com.iab.gpp.encoder.segment.EncodableSegment; -public final class EncodableFibonacciIntegerRange extends AbstractDirtyableBitStringDataType { +public final class EncodableFibonacciIntegerRange & FieldKey> extends AbstractDirtyableBitStringDataType { @Override public IntegerSet initialize() { @@ -14,7 +16,7 @@ public IntegerSet initialize() { } @Override - protected void encode(BitString builder, IntegerSet value) { + protected void encode(BitString builder, IntegerSet value, EncodableSegment segment) { try { FibonacciIntegerRangeEncoder.encode(builder, value); } catch (Exception e) { @@ -23,7 +25,7 @@ protected void encode(BitString builder, IntegerSet value) { } @Override - protected IntegerSet decode(BitString reader) { + protected IntegerSet decode(BitString reader, EncodableSegment segment) { try { return FibonacciIntegerRangeEncoder.decode(reader); } catch (Exception e) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java index db2d531e..862c5478 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java @@ -5,8 +5,10 @@ import com.iab.gpp.encoder.datatype.encoder.FixedBitfieldEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; +import com.iab.gpp.encoder.field.FieldKey; +import com.iab.gpp.encoder.segment.EncodableSegment; -public final class EncodableFixedBitfield extends AbstractDirtyableBitStringDataType { +public final class EncodableFixedBitfield & FieldKey> extends AbstractDirtyableBitStringDataType { private final int numElements; @@ -20,7 +22,7 @@ protected IntegerSet initialize() { } @Override - protected void encode(BitString builder, IntegerSet value) { + protected void encode(BitString builder, IntegerSet value, EncodableSegment segment) { try { FixedBitfieldEncoder.encode(builder, value, this.numElements); } catch (Exception e) { @@ -29,7 +31,7 @@ protected void encode(BitString builder, IntegerSet value) { } @Override - protected IntegerSet decode(BitString reader) { + protected IntegerSet decode(BitString reader, EncodableSegment segment) { try { return reader.readIntegerSet(this.numElements); } catch (Exception e) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java index 865e4988..6d075cd5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java @@ -1,17 +1,25 @@ package com.iab.gpp.encoder.datatype; +import java.util.function.Predicate; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; +import com.iab.gpp.encoder.field.FieldKey; +import com.iab.gpp.encoder.segment.EncodableSegment; -public final class EncodableFixedInteger extends AbstractEncodableBitStringDataType { +public final class EncodableFixedInteger & FieldKey> extends AbstractEncodableBitStringDataType { private final int bitStringLength; private final Integer initial; - public EncodableFixedInteger(int bitStringLength, Integer initial) { + public EncodableFixedInteger(int bitStringLength, Integer initial, Predicate validator) { this.bitStringLength = bitStringLength; this.initial = initial; + this.validator = validator; + } + + public EncodableFixedInteger(int bitStringLength, Integer initial) { + this(bitStringLength, initial, null); } @Override @@ -20,7 +28,7 @@ protected Integer initialize() { } @Override - protected void encode(BitString builder, Integer value) { + protected void encode(BitString builder, Integer value, EncodableSegment segment) { try { builder.writeInt(value, this.bitStringLength); } catch (Exception e) { @@ -29,7 +37,7 @@ protected void encode(BitString builder, Integer value) { } @Override - protected Integer decode(BitString reader) { + protected Integer decode(BitString reader, EncodableSegment segment) { try { return IntegerCache.valueOf(reader.readInt(bitStringLength)); } catch (Exception e) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java index 11ff574b..cb840d81 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java @@ -1,19 +1,23 @@ package com.iab.gpp.encoder.datatype; import java.util.List; +import java.util.function.Predicate; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerListEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; +import com.iab.gpp.encoder.field.FieldKey; +import com.iab.gpp.encoder.segment.EncodableSegment; -public final class EncodableFixedIntegerList extends AbstractDirtyableBitStringDataType { +public final class EncodableFixedIntegerList & FieldKey> extends AbstractDirtyableBitStringDataType { private final int elementBitStringLength; private final int numElements; - public EncodableFixedIntegerList(int elementBitStringLength, int numElements) { + public EncodableFixedIntegerList(int elementBitStringLength, int numElements, Predicate validator) { this.elementBitStringLength = elementBitStringLength; this.numElements = numElements; + this.validator = validator; } @Override @@ -22,7 +26,7 @@ protected FixedIntegerList initialize() { } @Override - protected void encode(BitString builder, FixedIntegerList value) { + protected void encode(BitString builder, FixedIntegerList value, EncodableSegment segment) { try { FixedIntegerListEncoder.encode(builder, value, this.elementBitStringLength, this.numElements); } catch (Exception e) { @@ -31,7 +35,7 @@ protected void encode(BitString builder, FixedIntegerList value) { } @Override - protected FixedIntegerList decode(BitString reader) { + protected FixedIntegerList decode(BitString reader, EncodableSegment segment) { try { return reader.readFixedIntegerList(elementBitStringLength, numElements); } catch (Exception e) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java index c1aeee48..5875f827 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java @@ -5,8 +5,10 @@ import com.iab.gpp.encoder.datatype.encoder.FixedIntegerRangeEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; +import com.iab.gpp.encoder.field.FieldKey; +import com.iab.gpp.encoder.segment.EncodableSegment; -public final class EncodableFixedIntegerRange extends AbstractDirtyableBitStringDataType { +public final class EncodableFixedIntegerRange & FieldKey> extends AbstractDirtyableBitStringDataType { @Override protected IntegerSet initialize() { @@ -14,7 +16,7 @@ protected IntegerSet initialize() { } @Override - protected void encode(BitString builder, IntegerSet value) { + protected void encode(BitString builder, IntegerSet value, EncodableSegment segment) { try { FixedIntegerRangeEncoder.encode(builder, value); } catch (Exception e) { @@ -23,7 +25,7 @@ protected void encode(BitString builder, IntegerSet value) { } @Override - protected IntegerSet decode(BitString reader) { + protected IntegerSet decode(BitString reader, EncodableSegment segment) { try { return FixedIntegerRangeEncoder.decode(reader); } catch (Exception e) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java index 1d4ac2de..38d2d4bb 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java @@ -4,8 +4,10 @@ import com.iab.gpp.encoder.datatype.encoder.FixedStringEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; +import com.iab.gpp.encoder.field.FieldKey; +import com.iab.gpp.encoder.segment.EncodableSegment; -public final class EncodableFixedString extends AbstractEncodableBitStringDataType { +public final class EncodableFixedString & FieldKey> extends AbstractEncodableBitStringDataType { private final int stringLength; private final String initial; @@ -21,7 +23,7 @@ protected String initialize() { } @Override - protected void encode(BitString builder, String value) { + protected void encode(BitString builder, String value, EncodableSegment segment) { try { FixedStringEncoder.encode(builder, value, this.stringLength); } catch (Exception e) { @@ -30,7 +32,7 @@ protected void encode(BitString builder, String value) { } @Override - protected String decode(BitString reader) { + protected String decode(BitString reader, EncodableSegment segment) { try { return FixedStringEncoder.decode(reader, this.stringLength); } catch (Exception e) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java index 7dddb9c4..b8842528 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java @@ -1,17 +1,19 @@ package com.iab.gpp.encoder.datatype; import java.util.Collection; -import java.util.function.IntSupplier; +import java.util.function.ToIntFunction; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedBitfieldEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; +import com.iab.gpp.encoder.field.FieldKey; +import com.iab.gpp.encoder.segment.EncodableSegment; -public final class EncodableFlexibleBitfield extends AbstractDirtyableBitStringDataType { +public final class EncodableFlexibleBitfield & FieldKey> extends AbstractDirtyableBitStringDataType { - private final IntSupplier getLengthSupplier; + private final ToIntFunction> getLengthSupplier; - public EncodableFlexibleBitfield(IntSupplier getLengthSupplier) { + public EncodableFlexibleBitfield(ToIntFunction> getLengthSupplier) { this.getLengthSupplier = getLengthSupplier; } @@ -21,18 +23,18 @@ protected IntegerSet initialize() { } @Override - protected void encode(BitString builder, IntegerSet value) { + protected void encode(BitString builder, IntegerSet value, EncodableSegment segment) { try { - FixedBitfieldEncoder.encode(builder, value, this.getLengthSupplier.getAsInt()); + FixedBitfieldEncoder.encode(builder, value, this.getLengthSupplier.applyAsInt(segment)); } catch (Exception e) { throw new EncodingException(e); } } @Override - protected IntegerSet decode(BitString reader) { + protected IntegerSet decode(BitString reader, EncodableSegment segment) { try { - return reader.readIntegerSet(getLengthSupplier.getAsInt()); + return reader.readIntegerSet(getLengthSupplier.applyAsInt(segment)); } catch (Exception e) { throw new DecodingException(e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java index 6e51a002..8ef5dd8c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java @@ -5,9 +5,11 @@ import com.iab.gpp.encoder.datatype.encoder.OptimizedFixedRangeEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; +import com.iab.gpp.encoder.field.FieldKey; +import com.iab.gpp.encoder.segment.EncodableSegment; -public final class EncodableOptimizedFixedRange extends AbstractDirtyableBitStringDataType { +public final class EncodableOptimizedFixedRange & FieldKey> extends AbstractDirtyableBitStringDataType { @Override protected IntegerSet initialize() { @@ -15,7 +17,7 @@ protected IntegerSet initialize() { } @Override - protected void encode(BitString builder, IntegerSet value) { + protected void encode(BitString builder, IntegerSet value, EncodableSegment segment) { try { OptimizedFixedRangeEncoder.encode(builder, value); } catch (Exception e) { @@ -24,7 +26,7 @@ protected void encode(BitString builder, IntegerSet value) { } @Override - protected IntegerSet decode(BitString reader) { + protected IntegerSet decode(BitString reader, EncodableSegment segment) { try { return OptimizedFixedRangeEncoder.decode(reader); } catch (Exception e) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java index b641fcb1..791bd05a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java @@ -1,8 +1,10 @@ package com.iab.gpp.encoder.datatype; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.field.FieldKey; +import com.iab.gpp.encoder.segment.EncodableSegment; -public final class UnencodableBoolean extends AbstractEncodableBitStringDataType { +public final class UnencodableBoolean & FieldKey> extends AbstractEncodableBitStringDataType { private final Boolean initial; @@ -16,12 +18,12 @@ protected Boolean initialize() { } @Override - protected void encode(BitString writer, Boolean value) { + protected void encode(BitString writer, Boolean value, EncodableSegment segment) { // pass } @Override - protected Boolean decode(BitString reader) { + protected Boolean decode(BitString reader, EncodableSegment segment) { return Boolean.FALSE; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableCharacter.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableCharacter.java index ee9cc941..04eb4a3a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableCharacter.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableCharacter.java @@ -1,14 +1,15 @@ package com.iab.gpp.encoder.datatype; import java.util.function.Predicate; +import com.iab.gpp.encoder.field.FieldKey; -public final class UnencodableCharacter extends DataType { +public final class UnencodableCharacter & FieldKey> extends DataType { private final Character initial; public UnencodableCharacter(Character initial, Predicate validator) { this.initial = initial; - withValidator(validator); + this.validator = validator; } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableInteger.java index 17c9876d..a6d5f1b8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableInteger.java @@ -1,6 +1,8 @@ package com.iab.gpp.encoder.datatype; -public final class UnencodableInteger extends DataType { +import com.iab.gpp.encoder.field.FieldKey; + +public final class UnencodableInteger & FieldKey> extends DataType { private final Integer initial; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java index 81297d4e..78b143f5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java @@ -6,7 +6,7 @@ public interface FieldKey { String getName(); - DataType getType(); + DataType getType(); public static final Predicate nullableBooleanAsTwoBitIntegerValidator = (n -> n >= 0 && n <= 2); public static final Predicate nonNullableBooleanAsTwoBitIntegerValidator = (n -> n >= 1 && n <= 2); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java index 6577d237..3b338e0b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java @@ -8,14 +8,14 @@ public final class FieldNames & FieldKey> { private final E[] keys; private final LinkedHashMap map; private final Integer[] indices; - private final DataType[] types; + private final Object[] types; @SafeVarargs FieldNames(E... keys) { this.keys = keys; this.map = new LinkedHashMap<>(); this.indices = new Integer[keys[0].getClass().getEnumConstants().length]; - this.types = new DataType[keys.length]; + this.types = new Object[keys.length]; for (int i = 0; i < keys.length; i++) { E key = keys[i]; this.map.put(key, key); @@ -32,8 +32,9 @@ public E get(int i) { return keys[i]; } - public DataType getType(int i) { - return types[i]; + @SuppressWarnings("unchecked") + public DataType getType(int i) { + return (DataType) types[i]; } public Integer getIndex(E key) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java index 48121a1c..2ce3cf26 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java @@ -6,14 +6,14 @@ import com.iab.gpp.encoder.section.HeaderV1; public enum HeaderV1Field implements FieldKey { - ID("Id", new EncodableFixedInteger(6, HeaderV1.ID)), - VERSION("Version", new EncodableFixedInteger(6, HeaderV1.VERSION)), - SECTION_IDS("SectionIds", new EncodableFibonacciIntegerRange()); + ID("Id", new EncodableFixedInteger<>(6, HeaderV1.ID)), + VERSION("Version", new EncodableFixedInteger<>(6, HeaderV1.VERSION)), + SECTION_IDS("SectionIds", new EncodableFibonacciIntegerRange<>()); private final String name; - private final DataType type; + private final DataType type; - HeaderV1Field(String name, DataType type) { + HeaderV1Field(String name, DataType type) { this.name = name; this.type = type; } @@ -24,7 +24,7 @@ public String getName() { } @Override - public DataType getType() { + public DataType getType() { return type; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java index e94ddb56..32628858 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java @@ -12,37 +12,37 @@ import com.iab.gpp.encoder.section.TcfCaV1; public enum TcfCaV1Field implements FieldKey { - VERSION("Version", new EncodableFixedInteger(6, TcfCaV1.VERSION)), - CREATED("Created", new EncodableDatetime()), - LAST_UPDATED("LastUpdated", new EncodableDatetime()), - CMP_ID("CmpId", new EncodableFixedInteger(12, 0)), - CMP_VERSION("CmpVersion", new EncodableFixedInteger(12, 0)), - CONSENT_SCREEN("ConsentScreen", new EncodableFixedInteger(6, 0)), - CONSENT_LANGUAGE("ConsentLanguage", new EncodableFixedString(2, "EN")), - VENDOR_LIST_VERSION("VendorListVersion", new EncodableFixedInteger(12, 0)), - TCF_POLICY_VERSION("TcfPolicyVersion", new EncodableFixedInteger(6, 2)), - USE_NON_STANDARD_STACKS("UseNonStandardStacks", new EncodableBoolean(false)), - SPECIAL_FEATURE_EXPRESS_CONSENT("SpecialFeatureExpressConsent", new EncodableFixedBitfield(12)), - PURPOSES_EXPRESS_CONSENT("PurposesExpressConsent", new EncodableFixedBitfield(24)), - PURPOSES_IMPLIED_CONSENT("PurposesImpliedConsent", new EncodableFixedBitfield(24)), - VENDOR_EXPRESS_CONSENT("VendorExpressConsent", new EncodableOptimizedFixedRange()), - VENDOR_IMPLIED_CONSENT("VendorImpliedConsent", new EncodableOptimizedFixedRange()), - PUB_RESTRICTIONS("PubRestrictions", new EncodableArrayOfFixedIntegerRanges(6, 2, false)), + VERSION("Version", new EncodableFixedInteger<>(6, TcfCaV1.VERSION)), + CREATED("Created", new EncodableDatetime<>()), + LAST_UPDATED("LastUpdated", new EncodableDatetime<>()), + CMP_ID("CmpId", new EncodableFixedInteger<>(12, 0)), + CMP_VERSION("CmpVersion", new EncodableFixedInteger<>(12, 0)), + CONSENT_SCREEN("ConsentScreen", new EncodableFixedInteger<>(6, 0)), + CONSENT_LANGUAGE("ConsentLanguage", new EncodableFixedString<>(2, "EN")), + VENDOR_LIST_VERSION("VendorListVersion", new EncodableFixedInteger<>(12, 0)), + TCF_POLICY_VERSION("TcfPolicyVersion", new EncodableFixedInteger<>(6, 2)), + USE_NON_STANDARD_STACKS("UseNonStandardStacks", new EncodableBoolean<>(false)), + SPECIAL_FEATURE_EXPRESS_CONSENT("SpecialFeatureExpressConsent", new EncodableFixedBitfield<>(12)), + PURPOSES_EXPRESS_CONSENT("PurposesExpressConsent", new EncodableFixedBitfield<>(24)), + PURPOSES_IMPLIED_CONSENT("PurposesImpliedConsent", new EncodableFixedBitfield<>(24)), + VENDOR_EXPRESS_CONSENT("VendorExpressConsent", new EncodableOptimizedFixedRange<>()), + VENDOR_IMPLIED_CONSENT("VendorImpliedConsent", new EncodableOptimizedFixedRange<>()), + PUB_RESTRICTIONS("PubRestrictions", new EncodableArrayOfFixedIntegerRanges<>(6, 2, false)), - PUB_PURPOSES_SEGMENT_TYPE("PubPurposesSegmentType", new EncodableFixedInteger(3, 3)), - PUB_PURPOSES_EXPRESS_CONSENT("PubPurposesExpressConsent", new EncodableFixedBitfield(24)), - PUB_PURPOSES_IMPLIED_CONSENT("PubPurposesImpliedConsent", new EncodableFixedBitfield(24)), - NUM_CUSTOM_PURPOSES("NumCustomPurposes", new EncodableFixedInteger(6, 0)), - CUSTOM_PURPOSES_EXPRESS_CONSENT("CustomPurposesExpressConsent", new EncodableFlexibleBitfield(segment -> (Integer) segment.getFieldValue(TcfCaV1Field.NUM_CUSTOM_PURPOSES))), - CUSTOM_PURPOSES_IMPLIED_CONSENT("CustomPurposesImpliedConsent", new EncodableFlexibleBitfield(segment -> (Integer) segment.getFieldValue(TcfCaV1Field.NUM_CUSTOM_PURPOSES))), + PUB_PURPOSES_SEGMENT_TYPE("PubPurposesSegmentType", new EncodableFixedInteger<>(3, 3)), + PUB_PURPOSES_EXPRESS_CONSENT("PubPurposesExpressConsent", new EncodableFixedBitfield<>(24)), + PUB_PURPOSES_IMPLIED_CONSENT("PubPurposesImpliedConsent", new EncodableFixedBitfield<>(24)), + NUM_CUSTOM_PURPOSES("NumCustomPurposes", new EncodableFixedInteger<>(6, 0)), + CUSTOM_PURPOSES_EXPRESS_CONSENT("CustomPurposesExpressConsent", new EncodableFlexibleBitfield(segment -> (Integer) segment.getFieldValueUnsafe(TcfCaV1Field.NUM_CUSTOM_PURPOSES))), + CUSTOM_PURPOSES_IMPLIED_CONSENT("CustomPurposesImpliedConsent", new EncodableFlexibleBitfield(segment -> (Integer) segment.getFieldValueUnsafe(TcfCaV1Field.NUM_CUSTOM_PURPOSES))), - DISCLOSED_VENDORS_SEGMENT_TYPE("DisclosedVendorsSegmentType", new EncodableFixedInteger(3, 1)), - DISCLOSED_VENDORS("DisclosedVendors", new EncodableOptimizedFixedRange()); + DISCLOSED_VENDORS_SEGMENT_TYPE("DisclosedVendorsSegmentType", new EncodableFixedInteger<>(3, 1)), + DISCLOSED_VENDORS("DisclosedVendors", new EncodableOptimizedFixedRange<>()); private final String name; - private final DataType type; + private final DataType type; - TcfCaV1Field(String name, DataType type) { + TcfCaV1Field(String name, DataType type) { this.name = name; this.type = type; } @@ -53,7 +53,7 @@ public String getName() { } @Override - public DataType getType() { + public DataType getType() { return type; } //@formatter:off diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java index ee4411e0..0d383908 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.field; -import java.util.function.IntSupplier; import com.iab.gpp.encoder.datatype.DataType; import com.iab.gpp.encoder.datatype.EncodableArrayOfFixedIntegerRanges; import com.iab.gpp.encoder.datatype.EncodableBoolean; @@ -11,43 +10,42 @@ import com.iab.gpp.encoder.datatype.EncodableFlexibleBitfield; import com.iab.gpp.encoder.datatype.EncodableOptimizedFixedRange; import com.iab.gpp.encoder.section.TcfEuV2; -import com.iab.gpp.encoder.segment.TcfEuV2PublisherPurposesSegment; public enum TcfEuV2Field implements FieldKey { - VERSION("Version", new EncodableFixedInteger(6, TcfEuV2.VERSION)), - CREATED("Created", new EncodableDatetime()), - LAST_UPDATED("LastUpdated", new EncodableDatetime()), - CMP_ID("CmpId", new EncodableFixedInteger(12, 0)), - CMP_VERSION("CmpVersion", new EncodableFixedInteger(12, 0)), - CONSENT_SCREEN("ConsentScreen", new EncodableFixedInteger(6, 0)), - CONSENT_LANGUAGE("ConsentLanguage", new EncodableFixedString(2, "EN")), - VENDOR_LIST_VERSION("VendorListVersion", new EncodableFixedInteger(12, 0)), - POLICY_VERSION("PolicyVersion", new EncodableFixedInteger(6, 2)), - IS_SERVICE_SPECIFIC("IsServiceSpecific", new EncodableBoolean(false)), - USE_NON_STANDARD_STACKS("UseNonStandardStacks", new EncodableBoolean(false)), - SPECIAL_FEATURE_OPTINS("SpecialFeatureOptins", new EncodableFixedBitfield(12)), - PURPOSE_CONSENTS("PurposeConsents", new EncodableFixedBitfield(24)), - PURPOSE_LEGITIMATE_INTERESTS("PurposeLegitimateInterests", new EncodableFixedBitfield(24)), - PURPOSE_ONE_TREATMENT("PurposeOneTreatment", new EncodableBoolean(false)), - PUBLISHER_COUNTRY_CODE("PublisherCountryCode", new EncodableFixedString(2, "AA")), - VENDOR_CONSENTS("VendorConsents", new EncodableOptimizedFixedRange()), - VENDOR_LEGITIMATE_INTERESTS("VendorLegitimateInterests", new EncodableOptimizedFixedRange()), - PUBLISHER_RESTRICTIONS("PublisherRestrictions", new EncodableArrayOfFixedIntegerRanges(6, 2, false)), - PUBLISHER_PURPOSES_SEGMENT_TYPE("PublisherPurposesSegmentType", new EncodableFixedInteger(3, 3)), - PUBLISHER_CONSENTS("PublisherConsents", new EncodableFixedBitfield(24)), - PUBLISHER_LEGITIMATE_INTERESTS("PublisherLegitimateInterests", new EncodableFixedBitfield(24)), - NUM_CUSTOM_PURPOSES("NumCustomPurposes", new EncodableFixedInteger(6, 0)), - PUBLISHER_CUSTOM_CONSENTS("PublisherCustomConsents", new EncodableFlexibleBitfield(segment -> (Integer) segment.getFieldValue(TcfEuV2Field.NUM_CUSTOM_PURPOSES))), - PUBLISHER_CUSTOM_LEGITIMATE_INTERESTS("PublisherCustomLegitimateInterests", new EncodableFlexibleBitfield(segment -> (Integer) segment.getFieldValue(TcfEuV2Field.NUM_CUSTOM_PURPOSES))), - VENDORS_ALLOWED_SEGMENT_TYPE("VendorsAllowedSegmentType", new EncodableFixedInteger(3, 2)), - VENDORS_ALLOWED("VendorsAllowed", new EncodableOptimizedFixedRange()), - VENDORS_DISCLOSED_SEGMENT_TYPE("VendorsDisclosedSegmentType", new EncodableFixedInteger(3, 1)), - VENDORS_DISCLOSED("VendorsDisclosed", new EncodableOptimizedFixedRange()); + VERSION("Version", new EncodableFixedInteger<>(6, TcfEuV2.VERSION)), + CREATED("Created", new EncodableDatetime<>()), + LAST_UPDATED("LastUpdated", new EncodableDatetime<>()), + CMP_ID("CmpId", new EncodableFixedInteger<>(12, 0)), + CMP_VERSION("CmpVersion", new EncodableFixedInteger<>(12, 0)), + CONSENT_SCREEN("ConsentScreen", new EncodableFixedInteger<>(6, 0)), + CONSENT_LANGUAGE("ConsentLanguage", new EncodableFixedString<>(2, "EN")), + VENDOR_LIST_VERSION("VendorListVersion", new EncodableFixedInteger<>(12, 0)), + POLICY_VERSION("PolicyVersion", new EncodableFixedInteger<>(6, 2)), + IS_SERVICE_SPECIFIC("IsServiceSpecific", new EncodableBoolean<>(false)), + USE_NON_STANDARD_STACKS("UseNonStandardStacks", new EncodableBoolean<>(false)), + SPECIAL_FEATURE_OPTINS("SpecialFeatureOptins", new EncodableFixedBitfield<>(12)), + PURPOSE_CONSENTS("PurposeConsents", new EncodableFixedBitfield<>(24)), + PURPOSE_LEGITIMATE_INTERESTS("PurposeLegitimateInterests", new EncodableFixedBitfield<>(24)), + PURPOSE_ONE_TREATMENT("PurposeOneTreatment", new EncodableBoolean<>(false)), + PUBLISHER_COUNTRY_CODE("PublisherCountryCode", new EncodableFixedString<>(2, "AA")), + VENDOR_CONSENTS("VendorConsents", new EncodableOptimizedFixedRange<>()), + VENDOR_LEGITIMATE_INTERESTS("VendorLegitimateInterests", new EncodableOptimizedFixedRange<>()), + PUBLISHER_RESTRICTIONS("PublisherRestrictions", new EncodableArrayOfFixedIntegerRanges<>(6, 2, false)), + PUBLISHER_PURPOSES_SEGMENT_TYPE("PublisherPurposesSegmentType", new EncodableFixedInteger<>(3, 3)), + PUBLISHER_CONSENTS("PublisherConsents", new EncodableFixedBitfield<>(24)), + PUBLISHER_LEGITIMATE_INTERESTS("PublisherLegitimateInterests", new EncodableFixedBitfield<>(24)), + NUM_CUSTOM_PURPOSES("NumCustomPurposes", new EncodableFixedInteger<>(6, 0)), + PUBLISHER_CUSTOM_CONSENTS("PublisherCustomConsents", new EncodableFlexibleBitfield(segment -> (Integer) segment.getFieldValueUnsafe(TcfEuV2Field.NUM_CUSTOM_PURPOSES))), + PUBLISHER_CUSTOM_LEGITIMATE_INTERESTS("PublisherCustomLegitimateInterests", new EncodableFlexibleBitfield(segment -> (Integer) segment.getFieldValueUnsafe(TcfEuV2Field.NUM_CUSTOM_PURPOSES))), + VENDORS_ALLOWED_SEGMENT_TYPE("VendorsAllowedSegmentType", new EncodableFixedInteger<>(3, 2)), + VENDORS_ALLOWED("VendorsAllowed", new EncodableOptimizedFixedRange<>()), + VENDORS_DISCLOSED_SEGMENT_TYPE("VendorsDisclosedSegmentType", new EncodableFixedInteger<>(3, 1)), + VENDORS_DISCLOSED("VendorsDisclosed", new EncodableOptimizedFixedRange<>()); private final String name; - private final DataType type; + private final DataType type; - TcfEuV2Field(String name, DataType type) { + TcfEuV2Field(String name, DataType type) { this.name = name; this.type = type; } @@ -58,7 +56,7 @@ public String getName() { } @Override - public DataType getType() { + public DataType getType() { return type; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java index 22a26588..3c2329e0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java @@ -8,39 +8,37 @@ import com.iab.gpp.encoder.section.UsCa; public enum UsCaField implements FieldKey { - VERSION("Version", new EncodableFixedInteger(6, UsCa.VERSION)), + VERSION("Version", new EncodableFixedInteger<>(6, UsCa.VERSION)), SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SHARING_OPT_OUT_NOTICE("SharingOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SENSITIVE_DATA_LIMIT_USE_NOTICE("SensitiveDataLimitUseNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SHARING_OPT_OUT("SharingOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList(2, 9) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList(2, 2) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>(2, 9, nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList<>(2, 2, nullableBooleanAsTwoBitIntegerListValidator)), PERSONAL_DATA_CONSENTS("PersonalDataConsents", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger(2, 1)), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean(true)), - GPC("Gpc", new EncodableBoolean(false)); + GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger<>(2, 1)), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean<>(true)), + GPC("Gpc", new EncodableBoolean<>(false)); private final String name; - private final DataType type; + private final DataType type; - UsCaField(String name, DataType type) { + UsCaField(String name, DataType type) { this.name = name; this.type = type; } @@ -51,7 +49,7 @@ public String getName() { } @Override - public DataType getType() { + public DataType getType() { return type; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java index 0db47e94..e04cdb4c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java @@ -8,36 +8,35 @@ import com.iab.gpp.encoder.section.UsCo; public enum UsCoField implements FieldKey { - VERSION("Version", new EncodableFixedInteger(6, UsCo.VERSION)), + VERSION("Version", new EncodableFixedInteger<>(6, UsCo.VERSION)), SHARING_NOTICE("SharingNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", new EncodableFixedIntegerList(2, 7) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", new EncodableFixedIntegerList<>(2, 7, nullableBooleanAsTwoBitIntegerListValidator)), KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger(2, 1)), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean(true)), - GPC("Gpc", new EncodableBoolean(false)); + GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger<>(2, 1)), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean<>(true)), + GPC("Gpc", new EncodableBoolean<>(false)); private final String name; - private final DataType type; + private final DataType type; - UsCoField(String name, DataType type) { + UsCoField(String name, DataType type) { this.name = name; this.type = type; } @@ -48,7 +47,7 @@ public String getName() { } @Override - public DataType getType() { + public DataType getType() { return type; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java index 180c2e2a..58990ea5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java @@ -8,37 +8,35 @@ import com.iab.gpp.encoder.section.UsCt; public enum UsCtField implements FieldKey { - VERSION("Version", new EncodableFixedInteger(6, UsCt.VERSION)), + VERSION("Version", new EncodableFixedInteger<>(6, UsCt.VERSION)), SHARING_NOTICE("SharingNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList(2, 8) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList(2, 3) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>(2, 8, nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList<>(2, 3, nullableBooleanAsTwoBitIntegerListValidator)), MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger(2, 1)), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean(true)), - GPC("Gpc", new EncodableBoolean(false)); + GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger<>(2, 1)), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean<>(true)), + GPC("Gpc", new EncodableBoolean<>(false)); private final String name; - private final DataType type; + private final DataType type; - UsCtField(String name, DataType type) { + UsCtField(String name, DataType type) { this.name = name; this.type = type; } @@ -49,7 +47,7 @@ public String getName() { } @Override - public DataType getType() { + public DataType getType() { return type; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java index c3c68162..3c768a13 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java @@ -8,40 +8,38 @@ import com.iab.gpp.encoder.section.UsDe; public enum UsDeField implements FieldKey { - VERSION("Version", new EncodableFixedInteger(6, UsDe.VERSION)), + VERSION("Version", new EncodableFixedInteger<>(6, UsDe.VERSION)), PROCESSING_NOTICE("ProcessingNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList(2, 9) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>(2, 9, nullableBooleanAsTwoBitIntegerListValidator)), KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", - new EncodableFixedIntegerList(2, 5) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>(2, 5, nullableBooleanAsTwoBitIntegerListValidator)), ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger(2, 1)), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean(true)), - GPC("Gpc", new EncodableBoolean(false)); + GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger<>(2, 1)), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean<>(true)), + GPC("Gpc", new EncodableBoolean<>(false)); private final String name; - private final DataType type; + private final DataType type; - UsDeField(String name, DataType type) { + UsDeField(String name, DataType type) { this.name = name; this.type = type; } @@ -52,7 +50,7 @@ public String getName() { } @Override - public DataType getType() { + public DataType getType() { return type; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java index 01404196..94c26276 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java @@ -6,35 +6,33 @@ import com.iab.gpp.encoder.section.UsFl; public enum UsFlField implements FieldKey { - VERSION("Version", new EncodableFixedInteger(6, UsFl.VERSION)), + VERSION("Version", new EncodableFixedInteger<>(6, UsFl.VERSION)), PROCESSING_NOTICE("ProcessingNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList(2, 8) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList(2, 3) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>(2, 8, nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList<>(2, 3, nullableBooleanAsTwoBitIntegerListValidator)), ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)); private final String name; - private final DataType type; + private final DataType type; - UsFlField(String name, DataType type) { + UsFlField(String name, DataType type) { this.name = name; this.type = type; } @@ -45,7 +43,7 @@ public String getName() { } @Override - public DataType getType() { + public DataType getType() { return type; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java index cf24cb62..f15b6157 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java @@ -8,39 +8,38 @@ import com.iab.gpp.encoder.section.UsIa; public enum UsIaField implements FieldKey { - VERSION("Version", new EncodableFixedInteger(6, UsIa.VERSION)), + VERSION("Version", new EncodableFixedInteger<>(6, UsIa.VERSION)), PROCESSING_NOTICE("ProcessingNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SENSITIVE_DATA_OPT_OUT_NOTICE("SensitiveDataOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList(2, 8) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>(2, 8, nullableBooleanAsTwoBitIntegerListValidator)), KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger(2, 1)), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean(true)), - GPC("Gpc", new EncodableBoolean(false)); + GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger<>(2, 1)), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean<>(true)), + GPC("Gpc", new EncodableBoolean<>(false)); private final String name; - private final DataType type; + private final DataType type; - UsIaField(String name, DataType type) { + UsIaField(String name, DataType type) { this.name = name; this.type = type; } @@ -51,7 +50,7 @@ public String getName() { } @Override - public DataType getType() { + public DataType getType() { return type; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java index bd776b28..012fb72d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java @@ -8,39 +8,37 @@ import com.iab.gpp.encoder.section.UsMt; public enum UsMtField implements FieldKey { - VERSION("Version", new EncodableFixedInteger(6, UsMt.VERSION)), + VERSION("Version", new EncodableFixedInteger<>(6, UsMt.VERSION)), SHARING_NOTICE("SharingNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList(2, 8) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList(2, 3) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>(2, 8, nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList<>(2, 3, nullableBooleanAsTwoBitIntegerListValidator)), ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger(2, 1)), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean(true)), - GPC("Gpc", new EncodableBoolean(false)); + GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger<>(2, 1)), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean<>(true)), + GPC("Gpc", new EncodableBoolean<>(false)); private final String name; - private final DataType type; + private final DataType type; - UsMtField(String name, DataType type) { + UsMtField(String name, DataType type) { this.name = name; this.type = type; } @@ -51,7 +49,7 @@ public String getName() { } @Override - public DataType getType() { + public DataType getType() { return type; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java index d418f28a..7bffab80 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java @@ -8,47 +8,45 @@ import com.iab.gpp.encoder.section.UsNat; public enum UsNatField implements FieldKey { - VERSION("Version", new EncodableFixedInteger(6, UsNat.VERSION)), + VERSION("Version", new EncodableFixedInteger<>(6, UsNat.VERSION)), SHARING_NOTICE("SharingNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SHARING_OPT_OUT_NOTICE("SharingOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE("SensitiveDataProcessingOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SENSITIVE_DATA_LIMIT_USE_NOTICE("SensitiveDataLimitUseNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SHARING_OPT_OUT("SharingOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList(2, 16) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList(2, 3) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>(2, 16, nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList<>(2, 3, nullableBooleanAsTwoBitIntegerListValidator)), PERSONAL_DATA_CONSENTS("PersonalDataConsents", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger(2, 1)), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean(true)), - GPC("Gpc", new EncodableBoolean(false)); + GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger<>(2, 1)), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean<>(true)), + GPC("Gpc", new EncodableBoolean<>(false)); private final String name; - private final DataType type; + private final DataType type; - UsNatField(String name, DataType type) { + UsNatField(String name, DataType type) { this.name = name; this.type = type; } @@ -59,7 +57,7 @@ public String getName() { } @Override - public DataType getType() { + public DataType getType() { return type; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java index 2b2e8193..750bffae 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java @@ -8,39 +8,38 @@ import com.iab.gpp.encoder.section.UsNe; public enum UsNeField implements FieldKey { - VERSION("Version", new EncodableFixedInteger(6, UsNe.VERSION)), + VERSION("Version", new EncodableFixedInteger<>(6, UsNe.VERSION)), PROCESSING_NOTICE("ProcessingNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList(2, 8) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>(2, 8, nullableBooleanAsTwoBitIntegerListValidator)), KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger(2, 1)), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean(true)), - GPC("Gpc", new EncodableBoolean(false)); + GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger<>(2, 1)), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean<>(true)), + GPC("Gpc", new EncodableBoolean<>(false)); private final String name; - private final DataType type; + private final DataType type; - UsNeField(String name, DataType type) { + UsNeField(String name, DataType type) { this.name = name; this.type = type; } @@ -51,7 +50,7 @@ public String getName() { } @Override - public DataType getType() { + public DataType getType() { return type; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java index c803daa3..26a5b198 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java @@ -8,39 +8,37 @@ import com.iab.gpp.encoder.section.UsNh; public enum UsNhField implements FieldKey { - VERSION("Version", new EncodableFixedInteger(6, UsNh.VERSION)), + VERSION("Version", new EncodableFixedInteger<>(6, UsNh.VERSION)), PROCESSING_NOTICE("ProcessingNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList(2, 8) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList(2, 3) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>(2, 8, nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList<>(2, 3, nullableBooleanAsTwoBitIntegerListValidator)), ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger(2, 1)), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean(true)), - GPC("Gpc", new EncodableBoolean(false)); + GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger<>(2, 1)), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean<>(true)), + GPC("Gpc", new EncodableBoolean<>(false)); private final String name; - private final DataType type; + private final DataType type; - UsNhField(String name, DataType type) { + UsNhField(String name, DataType type) { this.name = name; this.type = type; } @@ -51,7 +49,7 @@ public String getName() { } @Override - public DataType getType() { + public DataType getType() { return type; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java index 0ad6704d..24e94a2d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java @@ -8,39 +8,37 @@ import com.iab.gpp.encoder.section.UsNj; public enum UsNjField implements FieldKey { - VERSION("Version", new EncodableFixedInteger(6, UsNj.VERSION)), + VERSION("Version", new EncodableFixedInteger<>(6, UsNj.VERSION)), PROCESSING_NOTICE("ProcessingNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList(2, 10) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList(2, 5) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>(2, 10, nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList<>(2, 5, nullableBooleanAsTwoBitIntegerListValidator)), ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger(2, 1)), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean(true)), - GPC("Gpc", new EncodableBoolean(false)); + GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger<>(2, 1)), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean<>(true)), + GPC("Gpc", new EncodableBoolean<>(false)); private final String name; - private final DataType type; + private final DataType type; - UsNjField(String name, DataType type) { + UsNjField(String name, DataType type) { this.name = name; this.type = type; } @@ -51,7 +49,7 @@ public String getName() { } @Override - public DataType getType() { + public DataType getType() { return type; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java index b9e180d1..16df94f9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java @@ -8,39 +8,37 @@ import com.iab.gpp.encoder.section.UsOr; public enum UsOrField implements FieldKey { - VERSION("Version", new EncodableFixedInteger(6, UsOr.VERSION)), + VERSION("Version", new EncodableFixedInteger<>(6, UsOr.VERSION)), PROCESSING_NOTICE("ProcessingNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList(2, 11) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList(2, 3) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>(2, 11, nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList<>(2, 3, nullableBooleanAsTwoBitIntegerListValidator)), ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger(2, 1)), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean(true)), - GPC("Gpc", new EncodableBoolean(false)); + GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger<>(2, 1)), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean<>(true)), + GPC("Gpc", new EncodableBoolean<>(false)); private final String name; - private final DataType type; + private final DataType type; - UsOrField(String name, DataType type) { + UsOrField(String name, DataType type) { this.name = name; this.type = type; } @@ -51,7 +49,7 @@ public String getName() { } @Override - public DataType getType() { + public DataType getType() { return type; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java index 86a07343..4742a86f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java @@ -8,39 +8,38 @@ import com.iab.gpp.encoder.section.UsTn; public enum UsTnField implements FieldKey { - VERSION("Version", new EncodableFixedInteger(6, UsTn.VERSION)), + VERSION("Version", new EncodableFixedInteger<>(6, UsTn.VERSION)), PROCESSING_NOTICE("ProcessingNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList(2, 8) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>(2, 8, nullableBooleanAsTwoBitIntegerListValidator)), KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger(2, 1)), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean(true)), - GPC("Gpc", new EncodableBoolean(false)); + GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger<>(2, 1)), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean<>(true)), + GPC("Gpc", new EncodableBoolean<>(false)); private final String name; - private final DataType type; + private final DataType type; - UsTnField(String name, DataType type) { + UsTnField(String name, DataType type) { this.name = name; this.type = type; } @@ -51,7 +50,7 @@ public String getName() { } @Override - public DataType getType() { + public DataType getType() { return type; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java index fafff9d5..d571a463 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java @@ -8,39 +8,38 @@ import com.iab.gpp.encoder.section.UsTx; public enum UsTxField implements FieldKey { - VERSION("Version", new EncodableFixedInteger(6, UsTx.VERSION)), + VERSION("Version", new EncodableFixedInteger<>(6, UsTx.VERSION)), PROCESSING_NOTICE("ProcessingNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList(2, 8) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>(2, 8, nullableBooleanAsTwoBitIntegerListValidator)), KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger(2, 1)), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean(true)), - GPC("Gpc", new EncodableBoolean(false)); + GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger<>(2, 1)), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean<>(true)), + GPC("Gpc", new EncodableBoolean<>(false)); private final String name; - private final DataType type; + private final DataType type; - UsTxField(String name, DataType type) { + UsTxField(String name, DataType type) { this.name = name; this.type = type; } @@ -51,7 +50,7 @@ public String getName() { } @Override - public DataType getType() { + public DataType getType() { return type; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java index 0abf43de..101f80ec 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java @@ -6,35 +6,34 @@ import com.iab.gpp.encoder.section.UsUt; public enum UsUtField implements FieldKey { - VERSION("Version", new EncodableFixedInteger(6, UsUt.VERSION)), + VERSION("Version", new EncodableFixedInteger<>(6, UsUt.VERSION)), SHARING_NOTICE("SharingNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE("SensitiveDataProcessingOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList(2, 8) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>(2, 8, nullableBooleanAsTwoBitIntegerListValidator)), KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)); private final String name; - private final DataType type; + private final DataType type; - UsUtField(String name, DataType type) { + UsUtField(String name, DataType type) { this.name = name; this.type = type; } @@ -45,7 +44,7 @@ public String getName() { } @Override - public DataType getType() { + public DataType getType() { return type; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java index 5d8c3462..626de774 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java @@ -6,33 +6,32 @@ import com.iab.gpp.encoder.section.UsVa; public enum UsVaField implements FieldKey { - VERSION("Version", new EncodableFixedInteger(6, UsVa.VERSION)), + VERSION("Version", new EncodableFixedInteger<>(6, UsVa.VERSION)), SHARING_NOTICE("SharingNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList(2, 8) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>(2, 8, nullableBooleanAsTwoBitIntegerListValidator)), KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)); private final String name; - private final DataType type; + private final DataType type; - UsVaField(String name, DataType type) { + UsVaField(String name, DataType type) { this.name = name; this.type = type; } @@ -43,7 +42,7 @@ public String getName() { } @Override - public DataType getType() { + public DataType getType() { return type; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java index e05ab623..cacb12c0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java @@ -6,15 +6,15 @@ import com.iab.gpp.encoder.section.UspV1; public enum UspV1Field implements FieldKey { - VERSION("Version", new UnencodableInteger(UspV1.VERSION)), - NOTICE("Notice", new UnencodableCharacter('-', (v -> v == 'Y' || v == 'N' || v == '-'))), - OPT_OUT_SALE("OptOutSale", new UnencodableCharacter('-', (v -> v == 'Y' || v == 'N' || v == '-'))), - LSPA_COVERED("LspaCovered", new UnencodableCharacter('-', (v -> v == 'Y' || v == 'N' || v == '-'))); + VERSION("Version", new UnencodableInteger<>(UspV1.VERSION)), + NOTICE("Notice", new UnencodableCharacter<>('-', (v -> v == 'Y' || v == 'N' || v == '-'))), + OPT_OUT_SALE("OptOutSale", new UnencodableCharacter<>('-', (v -> v == 'Y' || v == 'N' || v == '-'))), + LSPA_COVERED("LspaCovered", new UnencodableCharacter<>('-', (v -> v == 'Y' || v == 'N' || v == '-'))); private final String name; - private final DataType type; + private final DataType type; - UspV1Field(String name, DataType type) { + UspV1Field(String name, DataType type) { this.name = name; this.type = type; } @@ -25,7 +25,7 @@ public String getName() { } @Override - public DataType getType() { + public DataType getType() { return type; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java index 75c967f0..414a2254 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java @@ -24,7 +24,7 @@ protected final CharSequence doEncode() { BitString bitString = new BitString(); int size = fieldNames.size(); for (int i = 0; i < size; i++) { - DataType field = fieldNames.getType(i); + DataType field = fieldNames.getType(i); if (field != null) { field.encode(bitString, values, i, this); } else { @@ -41,7 +41,7 @@ protected final void doDecode(CharSequence encodedString) { BitString bitString = decodeBitString(encodedString); int size = fieldNames.size(); for (int i = 0; i < size; i++) { - DataType field = fieldNames.getType(i); + DataType field = fieldNames.getType(i); if (field != null) { try { field.decode(bitString, values, i, this); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java index 65eb1f6c..3fbf06c5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java @@ -1,8 +1,6 @@ package com.iab.gpp.encoder.segment; -import java.util.function.Predicate; import com.iab.gpp.encoder.datatype.DataType; -import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.error.InvalidFieldException; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.field.FieldNames; @@ -23,7 +21,7 @@ public final E resolveKey(FieldKey fieldName) { return fieldNames.resolveKey(fieldName); } - protected final DataType get(E key) { + protected final DataType get(E key) { Integer index = fieldNames.getIndex(key); if (index != null) { return fieldNames.getType(index); @@ -64,8 +62,10 @@ public final Object getFieldValue(E fieldName) { ensureDecode(); return getFieldValueUnsafe(fieldName); } - - protected final Object getFieldValueUnsafe(E fieldName) { + + // TODO: try to hide this + @Override + public final Object getFieldValueUnsafe(E fieldName) { Integer index = fieldNames.getIndex(fieldName); if (index != null) { return fieldNames.getType(index).get(values, index); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java index c91ce0b4..d96424d7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java @@ -9,6 +9,8 @@ public abstract class EncodableSegment & FieldKey> extends Abs public abstract boolean hasField(E fieldName); public abstract Object getFieldValue(E fieldName); + + public abstract Object getFieldValueUnsafe(E fieldName); public abstract void setFieldValue(E fieldName, Object value); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java index a50f0a81..3ed42bc1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java @@ -1,9 +1,6 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableFibonacciIntegerRange; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.field.HeaderV1Field; -import com.iab.gpp.encoder.section.HeaderV1; public final class HeaderV1CoreSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java index cb9c5907..bfebcccb 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java @@ -1,14 +1,6 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableArrayOfFixedIntegerRanges; -import com.iab.gpp.encoder.datatype.EncodableBoolean; -import com.iab.gpp.encoder.datatype.EncodableDatetime; -import com.iab.gpp.encoder.datatype.EncodableFixedBitfield; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.EncodableFixedString; -import com.iab.gpp.encoder.datatype.EncodableOptimizedFixedRange; import com.iab.gpp.encoder.field.TcfCaV1Field; -import com.iab.gpp.encoder.section.TcfCaV1; public final class TcfCaV1CoreSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java index 6d398f78..277a33e5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java @@ -1,7 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.EncodableOptimizedFixedRange; import com.iab.gpp.encoder.field.TcfCaV1Field; public final class TcfCaV1DisclosedVendorsSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java index 7b58567d..9f690cb2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java @@ -1,9 +1,5 @@ package com.iab.gpp.encoder.segment; -import java.util.function.IntSupplier; -import com.iab.gpp.encoder.datatype.EncodableFixedBitfield; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.EncodableFlexibleBitfield; import com.iab.gpp.encoder.field.TcfCaV1Field; public final class TcfCaV1PublisherPurposesSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java index 3df0dd92..98aa2a04 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java @@ -2,15 +2,7 @@ import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; -import com.iab.gpp.encoder.datatype.EncodableArrayOfFixedIntegerRanges; -import com.iab.gpp.encoder.datatype.EncodableBoolean; -import com.iab.gpp.encoder.datatype.EncodableDatetime; -import com.iab.gpp.encoder.datatype.EncodableFixedBitfield; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.EncodableFixedString; -import com.iab.gpp.encoder.datatype.EncodableOptimizedFixedRange; import com.iab.gpp.encoder.field.TcfEuV2Field; -import com.iab.gpp.encoder.section.TcfEuV2; public final class TcfEuV2CoreSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java index 11c0b499..4865fcaf 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java @@ -1,11 +1,7 @@ package com.iab.gpp.encoder.segment; -import java.util.function.IntSupplier; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; -import com.iab.gpp.encoder.datatype.EncodableFixedBitfield; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.EncodableFlexibleBitfield; import com.iab.gpp.encoder.field.TcfEuV2Field; public final class TcfEuV2PublisherPurposesSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java index 91667df1..71c0ba33 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java @@ -2,8 +2,6 @@ import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.EncodableOptimizedFixedRange; import com.iab.gpp.encoder.field.TcfEuV2Field; public final class TcfEuV2VendorsAllowedSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java index da8afda2..d34f267d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java @@ -2,8 +2,6 @@ import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.EncodableOptimizedFixedRange; import com.iab.gpp.encoder.field.TcfEuV2Field; public final class TcfEuV2VendorsDisclosedSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java index 5512a52e..0d625b8d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java @@ -1,9 +1,6 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsCaField; -import com.iab.gpp.encoder.section.UsCa; public final class UsCaCoreSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java index a9d8e4a0..c7f28646 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java @@ -1,8 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableBoolean; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.UnencodableBoolean; import com.iab.gpp.encoder.field.UsCaField; public final class UsCaGpcSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java index 329c26a2..661393a2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java @@ -1,9 +1,6 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsCoField; -import com.iab.gpp.encoder.section.UsCo; public final class UsCoCoreSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java index ad343874..3b50ea42 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java @@ -1,8 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableBoolean; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.UnencodableBoolean; import com.iab.gpp.encoder.field.UsCoField; public final class UsCoGpcSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java index 6b58c80a..9414e8fa 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java @@ -1,9 +1,6 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsCtField; -import com.iab.gpp.encoder.section.UsCt; public final class UsCtCoreSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java index 218e3082..5ddc9577 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java @@ -1,8 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableBoolean; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.UnencodableBoolean; import com.iab.gpp.encoder.field.UsCtField; public final class UsCtGpcSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java index 2bd301bc..ba3dcb1e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java @@ -1,9 +1,6 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsDeField; -import com.iab.gpp.encoder.section.UsDe; public final class UsDeCoreSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java index e8557d3d..07659530 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java @@ -1,8 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableBoolean; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.UnencodableBoolean; import com.iab.gpp.encoder.field.UsDeField; public final class UsDeGpcSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java index f60992a8..06353278 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java @@ -1,9 +1,6 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsFlField; -import com.iab.gpp.encoder.section.UsFl; public final class UsFlCoreSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java index 69c5e93c..fd658faf 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java @@ -1,9 +1,6 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsIaField; -import com.iab.gpp.encoder.section.UsIa; public final class UsIaCoreSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java index e8dcd7a6..766eb006 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java @@ -1,8 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableBoolean; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.UnencodableBoolean; import com.iab.gpp.encoder.field.UsIaField; public final class UsIaGpcSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java index 128e0ac7..f5110ea6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java @@ -1,9 +1,6 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsMtField; -import com.iab.gpp.encoder.section.UsMt; public final class UsMtCoreSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java index 2146b166..9df22421 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java @@ -1,8 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableBoolean; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.UnencodableBoolean; import com.iab.gpp.encoder.field.UsMtField; public final class UsMtGpcSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java index 10b81165..b4d7523b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java @@ -1,10 +1,7 @@ package com.iab.gpp.encoder.segment; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsNatField; -import com.iab.gpp.encoder.section.UsNat; public final class UsNatCoreSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java index 7d54a916..1fb591cc 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java @@ -1,8 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableBoolean; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.UnencodableBoolean; import com.iab.gpp.encoder.field.UsNatField; public final class UsNatGpcSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java index 51ef86f9..c593421a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java @@ -1,9 +1,6 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsNeField; -import com.iab.gpp.encoder.section.UsNe; public final class UsNeCoreSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java index f656c321..2eae46ba 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java @@ -1,8 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableBoolean; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.UnencodableBoolean; import com.iab.gpp.encoder.field.UsNeField; public final class UsNeGpcSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java index 2d4bf1d4..9a801e7f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java @@ -1,9 +1,6 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsNhField; -import com.iab.gpp.encoder.section.UsNh; public final class UsNhCoreSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java index c7594924..8876ba1b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java @@ -1,8 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableBoolean; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.UnencodableBoolean; import com.iab.gpp.encoder.field.UsNhField; public final class UsNhGpcSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java index 5329d6f5..d4de4f4f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java @@ -1,9 +1,6 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsNjField; -import com.iab.gpp.encoder.section.UsNj; public final class UsNjCoreSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java index 8d24d925..ef321d4c 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java @@ -16,7 +16,7 @@ public void testEncode1() throws EncodingException { IntegerSet integerSet = new IntegerSet(); integerSet.add(28); BitString builder = new BitString(); - encodableFixedIntegerRange.encode(builder, integerSet); + encodableFixedIntegerRange.encode(builder, integerSet, null); Assertions.assertEquals("00000000000100000000000011100", builder.toString()); } @@ -26,20 +26,20 @@ public void testEncode2() throws EncodingException { IntegerSet integerSet = new IntegerSet(); integerSet.add(29); BitString builder = new BitString(); - encodableFixedIntegerRange.encode(builder, integerSet); + encodableFixedIntegerRange.encode(builder, integerSet, null); Assertions.assertEquals("00000000000100000000000011101", builder.toString()); } @Test public void testDecode1() throws DecodingException { EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange(); - Assertions.assertEquals(Set.of(28), encodableFixedIntegerRange.decode(BitString.of("00000000000100000000000011100"))); + Assertions.assertEquals(Set.of(28), encodableFixedIntegerRange.decode(BitString.of("00000000000100000000000011100"), null)); } @Test public void testDecode2() throws DecodingException { EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange(); - Assertions.assertEquals(Set.of(29), encodableFixedIntegerRange.decode(BitString.of("00000000000100000000000011101"))); + Assertions.assertEquals(Set.of(29), encodableFixedIntegerRange.decode(BitString.of("00000000000100000000000011101"), null)); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java index 6ca5f6b8..8199a47d 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java @@ -16,7 +16,7 @@ public void testEncode1() { IntegerSet integerSet = new IntegerSet(); integerSet.addAll(Arrays.asList(12, 24, 48)); BitString builder = new BitString(); - encodableOptimizedFixedRange.encode(builder, integerSet); + encodableOptimizedFixedRange.encode(builder, integerSet, null); Assertions.assertEquals("00000000001100000000000000001000000000001000000000000000000000001", builder.toString()); } @@ -26,7 +26,7 @@ public void testEncode2() { IntegerSet integerSet = new IntegerSet(); integerSet.addAll(Arrays.asList(18, 30)); BitString builder = new BitString(); - encodableOptimizedFixedRange.encode(builder, integerSet); + encodableOptimizedFixedRange.encode(builder, integerSet, null); Assertions.assertEquals("00000000000111100000000000000000001000000000001", builder.toString()); } @@ -35,7 +35,7 @@ public void testEncode3() { IntegerSet integerSet = new IntegerSet(); integerSet.addAll(Arrays.asList(28)); BitString builder = new BitString(); - encodableOptimizedFixedRange.encode(builder, integerSet); + encodableOptimizedFixedRange.encode(builder, integerSet, null); Assertions.assertEquals("000000000001110000000000000000000000000000001", builder.toString()); } @@ -44,27 +44,27 @@ public void testEncode4() { IntegerSet integerSet = new IntegerSet(); integerSet.addAll(Arrays.asList(29)); BitString builder = new BitString(); - encodableOptimizedFixedRange.encode(builder, integerSet); + encodableOptimizedFixedRange.encode(builder, integerSet, null); Assertions.assertEquals("0000000000011101100000000000100000000000011101", builder.toString()); } @Test public void testDecode1() { - Assertions.assertEquals(Set.of(12, 24, 48), encodableOptimizedFixedRange.decode(BitString.of("00000000001100000000000000001000000000001000000000000000000000001"))); + Assertions.assertEquals(Set.of(12, 24, 48), encodableOptimizedFixedRange.decode(BitString.of("00000000001100000000000000001000000000001000000000000000000000001"), null)); } @Test public void testDecode2() { - Assertions.assertEquals(Set.of(18, 30), encodableOptimizedFixedRange.decode(BitString.of("00000000000111100000000000000000001000000000001"))); + Assertions.assertEquals(Set.of(18, 30), encodableOptimizedFixedRange.decode(BitString.of("00000000000111100000000000000000001000000000001"), null)); } @Test public void testDecode3() { - Assertions.assertEquals(Set.of(28), encodableOptimizedFixedRange.decode(BitString.of("000000000001110000000000000000000000000000001"))); + Assertions.assertEquals(Set.of(28), encodableOptimizedFixedRange.decode(BitString.of("000000000001110000000000000000000000000000001"), null)); } @Test public void testDecode4() { - Assertions.assertEquals(Set.of(29), encodableOptimizedFixedRange.decode(BitString.of("0000000000011101100000000000100000000000011101"))); + Assertions.assertEquals(Set.of(29), encodableOptimizedFixedRange.decode(BitString.of("0000000000011101100000000000100000000000011101"), null)); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListEncoderTest.java index 9a980509..99ef930f 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListEncoderTest.java @@ -150,8 +150,8 @@ public void testEncode19() { } private FixedIntegerList decode(String str) { - EncodableFixedIntegerList encodable = new EncodableFixedIntegerList(2, 2); - return encodable.decode(BitString.of(str)); + EncodableFixedIntegerList encodable = new EncodableFixedIntegerList(2, 2, null); + return encodable.decode(BitString.of(str), null); } @Test From 10bd6a405bf65fda250cae4c2b9ccbdddf376564 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 10 Feb 2026 13:24:21 -0500 Subject: [PATCH 66/86] fix tests and cleanup --- .../java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java | 3 --- .../com/iab/gpp/encoder/segment/UsOrCoreSegment.java | 3 --- .../java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java | 3 --- .../com/iab/gpp/encoder/segment/UsTnCoreSegment.java | 3 --- .../java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java | 3 --- .../com/iab/gpp/encoder/segment/UsTxCoreSegment.java | 3 --- .../java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java | 3 --- .../com/iab/gpp/encoder/segment/UsUtCoreSegment.java | 3 --- .../com/iab/gpp/encoder/segment/UsVaCoreSegment.java | 3 --- .../com/iab/gpp/encoder/segment/UspV1CoreSegment.java | 3 --- .../encoder/datatype/EncodableFixedIntegerRangeTest.java | 9 +++++---- .../datatype/EncodableOptimizedFixedRangeTest.java | 3 ++- .../encoder/datatype/FixedIntegerListEncoderTest.java | 3 ++- .../datatype/encoder/FixedIntegerEncoderTest.java | 5 ----- .../encoder/datatype/encoder/FixedLongEncoderTest.java | 5 ----- 15 files changed, 9 insertions(+), 46 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java index 32cee7bf..badf504a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java @@ -1,8 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableBoolean; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.UnencodableBoolean; import com.iab.gpp.encoder.field.UsNjField; public final class UsNjGpcSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java index 3b421ffb..68fe7067 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java @@ -1,9 +1,6 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsOrField; -import com.iab.gpp.encoder.section.UsOr; public final class UsOrCoreSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java index 422dcd50..3ea74179 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java @@ -1,8 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableBoolean; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.UnencodableBoolean; import com.iab.gpp.encoder.field.UsOrField; public final class UsOrGpcSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java index 80d5c955..af7696db 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java @@ -1,9 +1,6 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsTnField; -import com.iab.gpp.encoder.section.UsTn; public final class UsTnCoreSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java index b7c389d8..8e8eebee 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java @@ -1,8 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableBoolean; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.UnencodableBoolean; import com.iab.gpp.encoder.field.UsTnField; public final class UsTnGpcSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java index 37c8a1d4..b2dd047b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java @@ -1,9 +1,6 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsTxField; -import com.iab.gpp.encoder.section.UsTx; public final class UsTxCoreSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java index d24c7f27..e64141c5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java @@ -1,8 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableBoolean; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.UnencodableBoolean; import com.iab.gpp.encoder.field.UsTxField; public final class UsTxGpcSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java index 1befef19..3d5b91f3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java @@ -1,9 +1,6 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsUtField; -import com.iab.gpp.encoder.section.UsUt; public final class UsUtCoreSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java index 2cf487c9..dea92e45 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java @@ -1,9 +1,6 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsVaField; -import com.iab.gpp.encoder.section.UsVa; public final class UsVaCoreSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java index d4c193d7..4e952a93 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java @@ -1,10 +1,7 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.UnencodableCharacter; -import com.iab.gpp.encoder.datatype.UnencodableInteger; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.field.UspV1Field; -import com.iab.gpp.encoder.section.UspV1; public final class UspV1CoreSegment extends AbstractLazilyEncodableSegment { diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java index ef321d4c..a9c163f2 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java @@ -7,12 +7,13 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; +import com.iab.gpp.encoder.field.UsNatField; public class EncodableFixedIntegerRangeTest { @Test public void testEncode1() throws EncodingException { - EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange(); + EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange<>(); IntegerSet integerSet = new IntegerSet(); integerSet.add(28); BitString builder = new BitString(); @@ -22,7 +23,7 @@ public void testEncode1() throws EncodingException { @Test public void testEncode2() throws EncodingException { - EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange(); + EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange<>(); IntegerSet integerSet = new IntegerSet(); integerSet.add(29); BitString builder = new BitString(); @@ -32,13 +33,13 @@ public void testEncode2() throws EncodingException { @Test public void testDecode1() throws DecodingException { - EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange(); + EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange<>(); Assertions.assertEquals(Set.of(28), encodableFixedIntegerRange.decode(BitString.of("00000000000100000000000011100"), null)); } @Test public void testDecode2() throws DecodingException { - EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange(); + EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange<>(); Assertions.assertEquals(Set.of(29), encodableFixedIntegerRange.decode(BitString.of("00000000000100000000000011101"), null)); } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java index 8199a47d..7f312681 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java @@ -6,10 +6,11 @@ import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.field.UsNatField; public class EncodableOptimizedFixedRangeTest { - private EncodableOptimizedFixedRange encodableOptimizedFixedRange = new EncodableOptimizedFixedRange(); + private EncodableOptimizedFixedRange encodableOptimizedFixedRange = new EncodableOptimizedFixedRange<>(); @Test public void testEncode1() { diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListEncoderTest.java index 99ef930f..db142349 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListEncoderTest.java @@ -9,6 +9,7 @@ import com.iab.gpp.encoder.datatype.encoder.FixedIntegerListEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; +import com.iab.gpp.encoder.field.UsNatField; public class FixedIntegerListEncoderTest { @@ -150,7 +151,7 @@ public void testEncode19() { } private FixedIntegerList decode(String str) { - EncodableFixedIntegerList encodable = new EncodableFixedIntegerList(2, 2, null); + EncodableFixedIntegerList encodable = new EncodableFixedIntegerList<>(2, 2, null); return encodable.decode(BitString.of(str), null); } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoderTest.java index 82c44343..d1fbbb47 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoderTest.java @@ -58,11 +58,6 @@ public void testEncode6() { private int decode(String str) { return BitString.of(str).readInt(str.length()); } - - @Test - public void testDecode1() throws DecodingException { - Assertions.assertEquals(0, decode("")); - } @Test public void testDecode2() throws DecodingException { diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoderTest.java index 0b1e9411..50fea8bb 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoderTest.java @@ -67,11 +67,6 @@ private long decode(String str) { return BitString.of(str).readLong(str.length()); } - @Test - public void testDecode1() throws DecodingException { - Assertions.assertEquals(0, decode("")); - } - @Test public void testDecode2() throws DecodingException { Assertions.assertEquals(0, decode("0")); From c3fdad4a409d884ea7e78f111aaf7280e81cac27 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 10 Feb 2026 14:08:14 -0500 Subject: [PATCH 67/86] remove bespoke segments --- .../com/iab/gpp/encoder/datatype/DataType.java | 1 - .../com/iab/gpp/encoder/field/FieldKey.java | 2 +- .../com/iab/gpp/encoder/section/HeaderV1.java | 4 ++-- .../com/iab/gpp/encoder/section/TcfCaV1.java | 6 ++---- .../com/iab/gpp/encoder/section/TcfEuV2.java | 7 ++----- .../java/com/iab/gpp/encoder/section/UsCa.java | 5 ++--- .../java/com/iab/gpp/encoder/section/UsCo.java | 5 ++--- .../java/com/iab/gpp/encoder/section/UsCt.java | 5 ++--- .../java/com/iab/gpp/encoder/section/UsDe.java | 5 ++--- .../java/com/iab/gpp/encoder/section/UsFl.java | 4 ++-- .../java/com/iab/gpp/encoder/section/UsIa.java | 5 ++--- .../java/com/iab/gpp/encoder/section/UsMt.java | 5 ++--- .../com/iab/gpp/encoder/section/UsNat.java | 5 +++-- .../java/com/iab/gpp/encoder/section/UsNe.java | 5 ++--- .../java/com/iab/gpp/encoder/section/UsNh.java | 5 ++--- .../java/com/iab/gpp/encoder/section/UsNj.java | 5 ++--- .../java/com/iab/gpp/encoder/section/UsOr.java | 5 ++--- .../java/com/iab/gpp/encoder/section/UsTn.java | 5 ++--- .../java/com/iab/gpp/encoder/section/UsTx.java | 5 ++--- .../java/com/iab/gpp/encoder/section/UsUt.java | 4 ++-- .../java/com/iab/gpp/encoder/section/UsVa.java | 4 ++-- .../encoder/segment/AbstractBase64Segment.java | 5 +---- .../iab/gpp/encoder/segment/Base64Segment.java | 18 ++++++++++++++++++ .../encoder/segment/HeaderV1CoreSegment.java | 11 ----------- .../encoder/segment/TcfCaV1CoreSegment.java | 11 ----------- .../TcfCaV1DisclosedVendorsSegment.java | 11 ----------- .../TcfCaV1PublisherPurposesSegment.java | 11 ----------- .../TcfEuV2PublisherPurposesSegment.java | 17 ----------------- .../segment/TcfEuV2VendorsAllowedSegment.java | 16 ---------------- .../TcfEuV2VendorsDisclosedSegment.java | 17 ----------------- ...ment.java => TraditionalBase64Segment.java} | 11 +++++------ .../gpp/encoder/segment/UsCaCoreSegment.java | 11 ----------- .../gpp/encoder/segment/UsCaGpcSegment.java | 11 ----------- .../gpp/encoder/segment/UsCoCoreSegment.java | 11 ----------- .../gpp/encoder/segment/UsCoGpcSegment.java | 11 ----------- .../gpp/encoder/segment/UsCtCoreSegment.java | 11 ----------- .../gpp/encoder/segment/UsCtGpcSegment.java | 11 ----------- .../gpp/encoder/segment/UsDeCoreSegment.java | 11 ----------- .../gpp/encoder/segment/UsDeGpcSegment.java | 11 ----------- .../gpp/encoder/segment/UsFlCoreSegment.java | 11 ----------- .../gpp/encoder/segment/UsIaCoreSegment.java | 11 ----------- .../gpp/encoder/segment/UsIaGpcSegment.java | 11 ----------- .../gpp/encoder/segment/UsMtCoreSegment.java | 11 ----------- .../gpp/encoder/segment/UsMtGpcSegment.java | 11 ----------- .../gpp/encoder/segment/UsNatCoreSegment.java | 6 ++++++ .../gpp/encoder/segment/UsNatGpcSegment.java | 11 ----------- .../gpp/encoder/segment/UsNeCoreSegment.java | 11 ----------- .../gpp/encoder/segment/UsNeGpcSegment.java | 11 ----------- .../gpp/encoder/segment/UsNhCoreSegment.java | 11 ----------- .../gpp/encoder/segment/UsNhGpcSegment.java | 11 ----------- .../gpp/encoder/segment/UsNjCoreSegment.java | 11 ----------- .../gpp/encoder/segment/UsNjGpcSegment.java | 11 ----------- .../gpp/encoder/segment/UsOrCoreSegment.java | 11 ----------- .../gpp/encoder/segment/UsOrGpcSegment.java | 11 ----------- .../gpp/encoder/segment/UsTnCoreSegment.java | 11 ----------- .../gpp/encoder/segment/UsTnGpcSegment.java | 11 ----------- .../gpp/encoder/segment/UsTxCoreSegment.java | 11 ----------- .../gpp/encoder/segment/UsTxGpcSegment.java | 10 ---------- .../gpp/encoder/segment/UsUtCoreSegment.java | 11 ----------- .../gpp/encoder/segment/UsVaCoreSegment.java | 11 ----------- 60 files changed, 70 insertions(+), 468 deletions(-) create mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/Base64Segment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java rename iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/{TcfEuV2CoreSegment.java => TraditionalBase64Segment.java} (50%) delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java index fc7a05aa..ccd4f871 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java @@ -60,7 +60,6 @@ public final void set(Object[] values, int index, Object newValue) { protected abstract T initialize(); - // TODO: rename @SuppressWarnings("unchecked") protected T processValue(T oldValue, Object newValue) { return (T) newValue; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java index 78b143f5..db5a626a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java @@ -7,7 +7,7 @@ public interface FieldKey { String getName(); DataType getType(); - + public static final Predicate nullableBooleanAsTwoBitIntegerValidator = (n -> n >= 0 && n <= 2); public static final Predicate nonNullableBooleanAsTwoBitIntegerValidator = (n -> n >= 1 && n <= 2); public static final Predicate nullableBooleanAsTwoBitIntegerListValidator = (l -> { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java index 9c72f472..d6f4485a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java @@ -2,7 +2,7 @@ import com.iab.gpp.encoder.datatype.IntegerSet; import com.iab.gpp.encoder.field.HeaderV1Field; -import com.iab.gpp.encoder.segment.HeaderV1CoreSegment; +import com.iab.gpp.encoder.segment.Base64Segment; public class HeaderV1 extends EncodableSection { @@ -11,7 +11,7 @@ public class HeaderV1 extends EncodableSection { public static final String NAME = "header"; public HeaderV1() { - super(new HeaderV1CoreSegment()); + super(new Base64Segment<>(HeaderV1Field.HEADER_CORE_SEGMENT_FIELD_NAMES)); } public HeaderV1(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java index 6c617596..0b47b597 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java @@ -7,9 +7,7 @@ import com.iab.gpp.encoder.datatype.RangeEntry; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.field.TcfCaV1Field; -import com.iab.gpp.encoder.segment.TcfCaV1CoreSegment; -import com.iab.gpp.encoder.segment.TcfCaV1DisclosedVendorsSegment; -import com.iab.gpp.encoder.segment.TcfCaV1PublisherPurposesSegment; +import com.iab.gpp.encoder.segment.Base64Segment; public class TcfCaV1 extends EncodableSection { @@ -18,7 +16,7 @@ public class TcfCaV1 extends EncodableSection { public static final String NAME = "tcfcav1"; public TcfCaV1() { - super(new TcfCaV1CoreSegment(), new TcfCaV1PublisherPurposesSegment(), new TcfCaV1DisclosedVendorsSegment()); + super(new Base64Segment<>(TcfCaV1Field.TCFCAV1_CORE_SEGMENT_FIELD_NAMES), new Base64Segment<>(TcfCaV1Field.TCFCAV1_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES), new Base64Segment<>(TcfCaV1Field.TCFCAV1_DISCLOSED_VENDORS_SEGMENT_FIELD_NAMES)); } public TcfCaV1(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java index 42ba5c2c..48cbc5ef 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java @@ -7,10 +7,7 @@ import com.iab.gpp.encoder.datatype.RangeEntry; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.field.TcfEuV2Field; -import com.iab.gpp.encoder.segment.TcfEuV2CoreSegment; -import com.iab.gpp.encoder.segment.TcfEuV2PublisherPurposesSegment; -import com.iab.gpp.encoder.segment.TcfEuV2VendorsAllowedSegment; -import com.iab.gpp.encoder.segment.TcfEuV2VendorsDisclosedSegment; +import com.iab.gpp.encoder.segment.TraditionalBase64Segment; public class TcfEuV2 extends EncodableSection { @@ -19,7 +16,7 @@ public class TcfEuV2 extends EncodableSection { public static final String NAME = "tcfeuv2"; public TcfEuV2() { - super(new TcfEuV2CoreSegment(), new TcfEuV2PublisherPurposesSegment(), new TcfEuV2VendorsAllowedSegment(), new TcfEuV2VendorsDisclosedSegment()); + super(new TraditionalBase64Segment<>(TcfEuV2Field.TCFEUV2_CORE_SEGMENT_FIELD_NAMES), new TraditionalBase64Segment<>(TcfEuV2Field.TCFEUV2_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES), new TraditionalBase64Segment<>(TcfEuV2Field.TCFEUV2_VENDORS_ALLOWED_SEGMENT_FIELD_NAMES), new TraditionalBase64Segment<>(TcfEuV2Field.TCFEUV2_VENDORS_DISCLOSED_SEGMENT_FIELD_NAMES)); } public TcfEuV2(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java index 751b3efd..86567df3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java @@ -4,8 +4,7 @@ import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsCaField; -import com.iab.gpp.encoder.segment.UsCaCoreSegment; -import com.iab.gpp.encoder.segment.UsCaGpcSegment; +import com.iab.gpp.encoder.segment.Base64Segment; public class UsCa extends EncodableSection { @@ -14,7 +13,7 @@ public class UsCa extends EncodableSection { public static final String NAME = "usca"; public UsCa() { - super(new UsCaCoreSegment(), new UsCaGpcSegment()); + super(new Base64Segment<>(UsCaField.USCA_CORE_SEGMENT_FIELD_NAMES), new Base64Segment<>(UsCaField.USCA_GPC_SEGMENT_FIELD_NAMES)); } public UsCa(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java index 6edcdc50..3ced2d1b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java @@ -4,8 +4,7 @@ import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsCoField; -import com.iab.gpp.encoder.segment.UsCoCoreSegment; -import com.iab.gpp.encoder.segment.UsCoGpcSegment; +import com.iab.gpp.encoder.segment.Base64Segment; public class UsCo extends EncodableSection { @@ -14,7 +13,7 @@ public class UsCo extends EncodableSection { public static final String NAME = "usco"; public UsCo() { - super(new UsCoCoreSegment(), new UsCoGpcSegment()); + super(new Base64Segment<>(UsCoField.USCO_CORE_SEGMENT_FIELD_NAMES), new Base64Segment<>(UsCoField.USCO_GPC_SEGMENT_FIELD_NAMES)); } public UsCo(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java index ae5d2425..3773b469 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java @@ -4,8 +4,7 @@ import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsCtField; -import com.iab.gpp.encoder.segment.UsCtCoreSegment; -import com.iab.gpp.encoder.segment.UsCtGpcSegment; +import com.iab.gpp.encoder.segment.Base64Segment; public class UsCt extends EncodableSection { @@ -14,7 +13,7 @@ public class UsCt extends EncodableSection { public static final String NAME = "usct"; public UsCt() { - super(new UsCtCoreSegment(), new UsCtGpcSegment()); + super(new Base64Segment<>(UsCtField.USCT_CORE_SEGMENT_FIELD_NAMES), new Base64Segment<>(UsCtField.USCT_GPC_SEGMENT_FIELD_NAMES)); } public UsCt(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java index b8813500..8ac0838e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java @@ -4,8 +4,7 @@ import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsDeField; -import com.iab.gpp.encoder.segment.UsDeCoreSegment; -import com.iab.gpp.encoder.segment.UsDeGpcSegment; +import com.iab.gpp.encoder.segment.Base64Segment; public class UsDe extends EncodableSection { @@ -14,7 +13,7 @@ public class UsDe extends EncodableSection { public static final String NAME = "usde"; public UsDe() { - super(new UsDeCoreSegment(), new UsDeGpcSegment()); + super(new Base64Segment<>(UsDeField.USDE_CORE_SEGMENT_FIELD_NAMES), new Base64Segment<>(UsDeField.USDE_GPC_SEGMENT_FIELD_NAMES)); } public UsDe(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java index fe9de548..be6c7aa8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java @@ -2,7 +2,7 @@ import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsFlField; -import com.iab.gpp.encoder.segment.UsFlCoreSegment; +import com.iab.gpp.encoder.segment.Base64Segment; public class UsFl extends EncodableSection { @@ -11,7 +11,7 @@ public class UsFl extends EncodableSection { public static final String NAME = "usfl"; public UsFl() { - super(new UsFlCoreSegment()); + super(new Base64Segment<>(UsFlField.USFL_CORE_SEGMENT_FIELD_NAMES)); } public UsFl(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java index b3aed14b..9a409953 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java @@ -4,8 +4,7 @@ import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsIaField; -import com.iab.gpp.encoder.segment.UsIaCoreSegment; -import com.iab.gpp.encoder.segment.UsIaGpcSegment; +import com.iab.gpp.encoder.segment.Base64Segment; public class UsIa extends EncodableSection { @@ -14,7 +13,7 @@ public class UsIa extends EncodableSection { public static final String NAME = "usia"; public UsIa() { - super(new UsIaCoreSegment(), new UsIaGpcSegment()); + super(new Base64Segment<>(UsIaField.USIA_CORE_SEGMENT_FIELD_NAMES), new Base64Segment<>(UsIaField.USIA_GPC_SEGMENT_FIELD_NAMES)); } public UsIa(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java index 37ad215a..afbb1c0c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java @@ -4,8 +4,7 @@ import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsMtField; -import com.iab.gpp.encoder.segment.UsMtCoreSegment; -import com.iab.gpp.encoder.segment.UsMtGpcSegment; +import com.iab.gpp.encoder.segment.Base64Segment; public class UsMt extends EncodableSection { @@ -14,7 +13,7 @@ public class UsMt extends EncodableSection { public static final String NAME = "usmt"; public UsMt() { - super(new UsMtCoreSegment(), new UsMtGpcSegment()); + super(new Base64Segment<>(UsMtField.USMT_CORE_SEGMENT_FIELD_NAMES), new Base64Segment<>(UsMtField.USMT_GPC_SEGMENT_FIELD_NAMES)); } public UsMt(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java index c120e0b0..a99d1f07 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java @@ -4,8 +4,8 @@ import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsNatField; +import com.iab.gpp.encoder.segment.Base64Segment; import com.iab.gpp.encoder.segment.UsNatCoreSegment; -import com.iab.gpp.encoder.segment.UsNatGpcSegment; public class UsNat extends EncodableSection { @@ -14,7 +14,8 @@ public class UsNat extends EncodableSection { public static final String NAME = "usnat"; public UsNat() { - super(new UsNatCoreSegment(), new UsNatGpcSegment()); + // NOTE: the core segment has inconsistent decoding due to a version mixup + super(new UsNatCoreSegment(), new Base64Segment<>(UsNatField.USNAT_GPC_SEGMENT_FIELD_NAMES)); } public UsNat(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java index 4ecd1d52..777e0c26 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java @@ -4,8 +4,7 @@ import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsNeField; -import com.iab.gpp.encoder.segment.UsNeCoreSegment; -import com.iab.gpp.encoder.segment.UsNeGpcSegment; +import com.iab.gpp.encoder.segment.Base64Segment; public class UsNe extends EncodableSection { @@ -14,7 +13,7 @@ public class UsNe extends EncodableSection { public static final String NAME = "usne"; public UsNe() { - super(new UsNeCoreSegment(), new UsNeGpcSegment()); + super(new Base64Segment<>(UsNeField.USNE_CORE_SEGMENT_FIELD_NAMES), new Base64Segment<>(UsNeField.USNE_GPC_SEGMENT_FIELD_NAMES)); } public UsNe(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java index d4df1a83..9d9362f7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java @@ -4,8 +4,7 @@ import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsNhField; -import com.iab.gpp.encoder.segment.UsNhCoreSegment; -import com.iab.gpp.encoder.segment.UsNhGpcSegment; +import com.iab.gpp.encoder.segment.Base64Segment; public class UsNh extends EncodableSection { @@ -14,7 +13,7 @@ public class UsNh extends EncodableSection { public static final String NAME = "usnh"; public UsNh() { - super(new UsNhCoreSegment(), new UsNhGpcSegment()); + super(new Base64Segment<>(UsNhField.USNH_CORE_SEGMENT_FIELD_NAMES), new Base64Segment<>(UsNhField.USNH_GPC_SEGMENT_FIELD_NAMES)); } public UsNh(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java index 973d850a..5d4ea71b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java @@ -4,8 +4,7 @@ import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsNjField; -import com.iab.gpp.encoder.segment.UsNjCoreSegment; -import com.iab.gpp.encoder.segment.UsNjGpcSegment; +import com.iab.gpp.encoder.segment.Base64Segment; public class UsNj extends EncodableSection { @@ -14,7 +13,7 @@ public class UsNj extends EncodableSection { public static final String NAME = "usnj"; public UsNj() { - super(new UsNjCoreSegment(), new UsNjGpcSegment()); + super(new Base64Segment<>(UsNjField.USNJ_CORE_SEGMENT_FIELD_NAMES), new Base64Segment<>(UsNjField.USNJ_GPC_SEGMENT_FIELD_NAMES)); } public UsNj(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java index 8c976cea..31b2427e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java @@ -4,8 +4,7 @@ import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsOrField; -import com.iab.gpp.encoder.segment.UsOrCoreSegment; -import com.iab.gpp.encoder.segment.UsOrGpcSegment; +import com.iab.gpp.encoder.segment.Base64Segment; public class UsOr extends EncodableSection { @@ -14,7 +13,7 @@ public class UsOr extends EncodableSection { public static final String NAME = "usor"; public UsOr() { - super(new UsOrCoreSegment(), new UsOrGpcSegment()); + super(new Base64Segment<>(UsOrField.USOR_CORE_SEGMENT_FIELD_NAMES), new Base64Segment<>(UsOrField.USOR_GPC_SEGMENT_FIELD_NAMES)); } public UsOr(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java index bc60d071..259751b4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java @@ -4,8 +4,7 @@ import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsTnField; -import com.iab.gpp.encoder.segment.UsTnCoreSegment; -import com.iab.gpp.encoder.segment.UsTnGpcSegment; +import com.iab.gpp.encoder.segment.Base64Segment; public class UsTn extends EncodableSection { @@ -14,7 +13,7 @@ public class UsTn extends EncodableSection { public static final String NAME = "ustn"; public UsTn() { - super(new UsTnCoreSegment(), new UsTnGpcSegment()); + super(new Base64Segment<>(UsTnField.USTN_CORE_SEGMENT_FIELD_NAMES), new Base64Segment<>(UsTnField.USTN_GPC_SEGMENT_FIELD_NAMES)); } public UsTn(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java index 05c1d5c0..cb77ca3a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java @@ -4,8 +4,7 @@ import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsTxField; -import com.iab.gpp.encoder.segment.UsTxCoreSegment; -import com.iab.gpp.encoder.segment.UsTxGpcSegment; +import com.iab.gpp.encoder.segment.Base64Segment; public class UsTx extends EncodableSection { @@ -14,7 +13,7 @@ public class UsTx extends EncodableSection { public static final String NAME = "ustx"; public UsTx() { - super(new UsTxCoreSegment(), new UsTxGpcSegment()); + super(new Base64Segment<>(UsTxField.USTX_CORE_SEGMENT_FIELD_NAMES), new Base64Segment<>(UsTxField.USTX_GPC_SEGMENT_FIELD_NAMES)); } public UsTx(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java index 68a7a729..1fcd44d0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java @@ -2,7 +2,7 @@ import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsUtField; -import com.iab.gpp.encoder.segment.UsUtCoreSegment; +import com.iab.gpp.encoder.segment.Base64Segment; public class UsUt extends EncodableSection { @@ -11,7 +11,7 @@ public class UsUt extends EncodableSection { public static final String NAME = "usut"; public UsUt() { - super(new UsUtCoreSegment()); + super(new Base64Segment<>(UsUtField.USUT_CORE_SEGMENT_FIELD_NAMES)); } public UsUt(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java index ee12afe5..784fe826 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java @@ -2,7 +2,7 @@ import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsVaField; -import com.iab.gpp.encoder.segment.UsVaCoreSegment; +import com.iab.gpp.encoder.segment.Base64Segment; public class UsVa extends EncodableSection { @@ -11,7 +11,7 @@ public class UsVa extends EncodableSection { public static final String NAME = "usva"; public UsVa() { - super(new UsVaCoreSegment()); + super(new Base64Segment<>(UsVaField.USVA_CORE_SEGMENT_FIELD_NAMES)); } public UsVa(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java index 414a2254..0c5f9e39 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.segment; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.DataType; import com.iab.gpp.encoder.error.DecodingException; @@ -15,9 +14,7 @@ protected AbstractBase64Segment(FieldNames fieldNames) { super(fieldNames); } - protected AbstractBase64UrlEncoder getBase64UrlEncoder() { - return CompressedBase64UrlEncoder.getInstance(); - } + protected abstract AbstractBase64UrlEncoder getBase64UrlEncoder(); @Override protected final CharSequence doEncode() { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/Base64Segment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/Base64Segment.java new file mode 100644 index 00000000..126845e7 --- /dev/null +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/Base64Segment.java @@ -0,0 +1,18 @@ +package com.iab.gpp.encoder.segment; + +import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; +import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; +import com.iab.gpp.encoder.field.FieldKey; +import com.iab.gpp.encoder.field.FieldNames; + +public final class Base64Segment & FieldKey> extends AbstractBase64Segment { + + public Base64Segment(FieldNames fieldNames) { + super(fieldNames); + } + + protected AbstractBase64UrlEncoder getBase64UrlEncoder() { + return CompressedBase64UrlEncoder.getInstance(); + } + +} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java deleted file mode 100644 index 3ed42bc1..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.HeaderV1Field; - -public final class HeaderV1CoreSegment extends AbstractBase64Segment { - - public HeaderV1CoreSegment() { - super(HeaderV1Field.HEADER_CORE_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java deleted file mode 100644 index bfebcccb..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.TcfCaV1Field; - -public final class TcfCaV1CoreSegment extends AbstractBase64Segment { - - public TcfCaV1CoreSegment() { - super(TcfCaV1Field.TCFCAV1_CORE_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java deleted file mode 100644 index 277a33e5..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.TcfCaV1Field; - -public final class TcfCaV1DisclosedVendorsSegment extends AbstractBase64Segment { - - public TcfCaV1DisclosedVendorsSegment() { - super(TcfCaV1Field.TCFCAV1_DISCLOSED_VENDORS_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java deleted file mode 100644 index 9f690cb2..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.TcfCaV1Field; - -public final class TcfCaV1PublisherPurposesSegment extends AbstractBase64Segment { - - public TcfCaV1PublisherPurposesSegment() { - super(TcfCaV1Field.TCFCAV1_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java deleted file mode 100644 index 4865fcaf..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; -import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; -import com.iab.gpp.encoder.field.TcfEuV2Field; - -public final class TcfEuV2PublisherPurposesSegment extends AbstractBase64Segment { - - public TcfEuV2PublisherPurposesSegment() { - super(TcfEuV2Field.TCFEUV2_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES); - } - - protected AbstractBase64UrlEncoder getBase64UrlEncoder() { - return TraditionalBase64UrlEncoder.getInstance(); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java deleted file mode 100644 index 71c0ba33..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; -import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; -import com.iab.gpp.encoder.field.TcfEuV2Field; - -public final class TcfEuV2VendorsAllowedSegment extends AbstractBase64Segment { - - public TcfEuV2VendorsAllowedSegment() { - super(TcfEuV2Field.TCFEUV2_VENDORS_ALLOWED_SEGMENT_FIELD_NAMES); - } - - protected AbstractBase64UrlEncoder getBase64UrlEncoder() { - return TraditionalBase64UrlEncoder.getInstance(); - } -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java deleted file mode 100644 index d34f267d..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; -import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; -import com.iab.gpp.encoder.field.TcfEuV2Field; - -public final class TcfEuV2VendorsDisclosedSegment extends AbstractBase64Segment { - - public TcfEuV2VendorsDisclosedSegment() { - super(TcfEuV2Field.TCFEUV2_VENDORS_DISCLOSED_SEGMENT_FIELD_NAMES); - } - - protected AbstractBase64UrlEncoder getBase64UrlEncoder() { - return TraditionalBase64UrlEncoder.getInstance(); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TraditionalBase64Segment.java similarity index 50% rename from iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java rename to iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TraditionalBase64Segment.java index 98aa2a04..dccbd52e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TraditionalBase64Segment.java @@ -2,14 +2,13 @@ import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; -import com.iab.gpp.encoder.field.TcfEuV2Field; +import com.iab.gpp.encoder.field.FieldKey; +import com.iab.gpp.encoder.field.FieldNames; -public final class TcfEuV2CoreSegment extends AbstractBase64Segment { +public final class TraditionalBase64Segment & FieldKey> extends AbstractBase64Segment { - public TcfEuV2CoreSegment() { - super(TcfEuV2Field.TCFEUV2_CORE_SEGMENT_FIELD_NAMES); - // NOTE: TcfEuV2.onSet records modifications - + public TraditionalBase64Segment(FieldNames fieldNames) { + super(fieldNames); } protected AbstractBase64UrlEncoder getBase64UrlEncoder() { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java deleted file mode 100644 index 0d625b8d..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.UsCaField; - -public final class UsCaCoreSegment extends AbstractBase64Segment { - - public UsCaCoreSegment() { - super(UsCaField.USCA_CORE_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java deleted file mode 100644 index c7f28646..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.UsCaField; - -public final class UsCaGpcSegment extends AbstractBase64Segment { - - public UsCaGpcSegment() { - super(UsCaField.USCA_GPC_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java deleted file mode 100644 index 661393a2..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.UsCoField; - -public final class UsCoCoreSegment extends AbstractBase64Segment { - - public UsCoCoreSegment() { - super(UsCoField.USCO_CORE_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java deleted file mode 100644 index 3b50ea42..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.UsCoField; - -public final class UsCoGpcSegment extends AbstractBase64Segment { - - public UsCoGpcSegment() { - super(UsCoField.USCO_GPC_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java deleted file mode 100644 index 9414e8fa..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.UsCtField; - -public final class UsCtCoreSegment extends AbstractBase64Segment { - - public UsCtCoreSegment() { - super(UsCtField.USCT_CORE_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java deleted file mode 100644 index 5ddc9577..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.UsCtField; - -public final class UsCtGpcSegment extends AbstractBase64Segment { - - public UsCtGpcSegment() { - super(UsCtField.USCT_GPC_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java deleted file mode 100644 index ba3dcb1e..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.UsDeField; - -public final class UsDeCoreSegment extends AbstractBase64Segment { - - public UsDeCoreSegment() { - super(UsDeField.USDE_CORE_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java deleted file mode 100644 index 07659530..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.UsDeField; - -public final class UsDeGpcSegment extends AbstractBase64Segment { - - public UsDeGpcSegment() { - super(UsDeField.USDE_GPC_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java deleted file mode 100644 index 06353278..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.UsFlField; - -public final class UsFlCoreSegment extends AbstractBase64Segment { - - public UsFlCoreSegment() { - super(UsFlField.USFL_CORE_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java deleted file mode 100644 index fd658faf..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.UsIaField; - -public final class UsIaCoreSegment extends AbstractBase64Segment { - - public UsIaCoreSegment() { - super(UsIaField.USIA_CORE_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java deleted file mode 100644 index 766eb006..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.UsIaField; - -public final class UsIaGpcSegment extends AbstractBase64Segment { - - public UsIaGpcSegment() { - super(UsIaField.USIA_GPC_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java deleted file mode 100644 index f5110ea6..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.UsMtField; - -public final class UsMtCoreSegment extends AbstractBase64Segment { - - public UsMtCoreSegment() { - super(UsMtField.USMT_CORE_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java deleted file mode 100644 index 9df22421..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.UsMtField; - -public final class UsMtGpcSegment extends AbstractBase64Segment { - - public UsMtGpcSegment() { - super(UsMtField.USMT_GPC_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java index b4d7523b..d87a5997 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java @@ -1,5 +1,7 @@ package com.iab.gpp.encoder.segment; +import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; +import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.field.UsNatField; @@ -9,6 +11,10 @@ public UsNatCoreSegment() { super(UsNatField.USNAT_CORE_SEGMENT_FIELD_NAMES); } + protected AbstractBase64UrlEncoder getBase64UrlEncoder() { + return TraditionalBase64UrlEncoder.getInstance(); + } + @Override protected BitString decodeBitString(CharSequence encodedString) { BitString bitString = super.decodeBitString(encodedString); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java deleted file mode 100644 index 1fb591cc..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.UsNatField; - -public final class UsNatGpcSegment extends AbstractBase64Segment { - - public UsNatGpcSegment() { - super(UsNatField.USNAT_GPC_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java deleted file mode 100644 index c593421a..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.UsNeField; - -public final class UsNeCoreSegment extends AbstractBase64Segment { - - public UsNeCoreSegment() { - super(UsNeField.USNE_CORE_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java deleted file mode 100644 index 2eae46ba..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.UsNeField; - -public final class UsNeGpcSegment extends AbstractBase64Segment { - - public UsNeGpcSegment() { - super(UsNeField.USNE_GPC_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java deleted file mode 100644 index 9a801e7f..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.UsNhField; - -public final class UsNhCoreSegment extends AbstractBase64Segment { - - public UsNhCoreSegment() { - super(UsNhField.USNH_CORE_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java deleted file mode 100644 index 8876ba1b..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.UsNhField; - -public final class UsNhGpcSegment extends AbstractBase64Segment { - - public UsNhGpcSegment() { - super(UsNhField.USNH_GPC_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java deleted file mode 100644 index d4de4f4f..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.UsNjField; - -public final class UsNjCoreSegment extends AbstractBase64Segment { - - public UsNjCoreSegment() { - super(UsNjField.USNJ_CORE_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java deleted file mode 100644 index badf504a..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.UsNjField; - -public final class UsNjGpcSegment extends AbstractBase64Segment { - - public UsNjGpcSegment() { - super(UsNjField.USNJ_GPC_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java deleted file mode 100644 index 68fe7067..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.UsOrField; - -public final class UsOrCoreSegment extends AbstractBase64Segment { - - public UsOrCoreSegment() { - super(UsOrField.USOR_CORE_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java deleted file mode 100644 index 3ea74179..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.UsOrField; - -public final class UsOrGpcSegment extends AbstractBase64Segment { - - public UsOrGpcSegment() { - super(UsOrField.USOR_GPC_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java deleted file mode 100644 index af7696db..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.UsTnField; - -public final class UsTnCoreSegment extends AbstractBase64Segment { - - public UsTnCoreSegment() { - super(UsTnField.USTN_CORE_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java deleted file mode 100644 index 8e8eebee..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.UsTnField; - -public final class UsTnGpcSegment extends AbstractBase64Segment { - - public UsTnGpcSegment() { - super(UsTnField.USTN_GPC_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java deleted file mode 100644 index b2dd047b..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.UsTxField; - -public final class UsTxCoreSegment extends AbstractBase64Segment { - - public UsTxCoreSegment() { - super(UsTxField.USTX_CORE_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java deleted file mode 100644 index e64141c5..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.UsTxField; - -public final class UsTxGpcSegment extends AbstractBase64Segment { - - public UsTxGpcSegment() { - super(UsTxField.USTX_GPC_SEGMENT_FIELD_NAMES); - } -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java deleted file mode 100644 index 3d5b91f3..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.UsUtField; - -public final class UsUtCoreSegment extends AbstractBase64Segment { - - public UsUtCoreSegment() { - super(UsUtField.USUT_CORE_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java deleted file mode 100644 index dea92e45..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.UsVaField; - -public final class UsVaCoreSegment extends AbstractBase64Segment { - - public UsVaCoreSegment() { - super(UsVaField.USVA_CORE_SEGMENT_FIELD_NAMES); - } - -} From 0a1ea0965f1563b08f611a357c105e03970b88b0 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 10 Feb 2026 14:37:14 -0500 Subject: [PATCH 68/86] clean up us hierarchy --- .../encoder/section/AbstractUsSection.java | 16 ++++++ .../section/AbstractUsSectionWithGpc.java | 55 +++++++++++++++++++ .../com/iab/gpp/encoder/section/UsCa.java | 37 +------------ .../com/iab/gpp/encoder/section/UsCo.java | 37 +------------ .../com/iab/gpp/encoder/section/UsCt.java | 37 +------------ .../com/iab/gpp/encoder/section/UsDe.java | 37 +------------ .../com/iab/gpp/encoder/section/UsFl.java | 2 +- .../com/iab/gpp/encoder/section/UsIa.java | 37 +------------ .../com/iab/gpp/encoder/section/UsMt.java | 37 +------------ .../com/iab/gpp/encoder/section/UsNat.java | 37 +------------ .../com/iab/gpp/encoder/section/UsNe.java | 36 +----------- .../com/iab/gpp/encoder/section/UsNh.java | 37 +------------ .../com/iab/gpp/encoder/section/UsNj.java | 37 +------------ .../com/iab/gpp/encoder/section/UsOr.java | 37 +------------ .../com/iab/gpp/encoder/section/UsTn.java | 37 +------------ .../com/iab/gpp/encoder/section/UsTx.java | 37 +------------ .../com/iab/gpp/encoder/section/UsUt.java | 2 +- .../com/iab/gpp/encoder/section/UsVa.java | 2 +- 18 files changed, 113 insertions(+), 444 deletions(-) create mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractUsSection.java create mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractUsSectionWithGpc.java diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractUsSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractUsSection.java new file mode 100644 index 00000000..cd7d1714 --- /dev/null +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractUsSection.java @@ -0,0 +1,16 @@ +package com.iab.gpp.encoder.section; + +import java.util.ArrayList; +import java.util.List; +import com.iab.gpp.encoder.datatype.FixedIntegerList; +import com.iab.gpp.encoder.field.FieldKey; +import com.iab.gpp.encoder.field.UsCaField; +import com.iab.gpp.encoder.segment.EncodableSegment; + +public abstract class AbstractUsSection & FieldKey> extends EncodableSection { + + @SafeVarargs + protected AbstractUsSection(EncodableSegment... segments) { + super(segments); + } +} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractUsSectionWithGpc.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractUsSectionWithGpc.java new file mode 100644 index 00000000..f04ed5ad --- /dev/null +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractUsSectionWithGpc.java @@ -0,0 +1,55 @@ +package com.iab.gpp.encoder.section; + +import java.util.ArrayList; +import java.util.List; +import com.iab.gpp.encoder.field.FieldKey; +import com.iab.gpp.encoder.field.UsNeField; +import com.iab.gpp.encoder.segment.EncodableSegment; + +public abstract class AbstractUsSectionWithGpc & FieldKey> extends AbstractUsSection { + + protected AbstractUsSectionWithGpc(EncodableSegment coreSegment, EncodableSegment gpcSegment) { + super(coreSegment, gpcSegment); + } + + protected abstract E getGpcSegmentIncludedKey(); + + @Override + protected final void doDecode(CharSequence encodedString) { + List encodedSegments = SlicedCharSequence.split(encodedString, '.'); + int numEncodedSegments = encodedSegments.size(); + + if (numEncodedSegments > 0) { + getSegment(0).decode(encodedSegments.get(0)); + } + + E gpcSegmentIncludedKey = getGpcSegmentIncludedKey(); + if (numEncodedSegments > 1) { + getSegment(1).setFieldValue(gpcSegmentIncludedKey, Boolean.TRUE); + getSegment(1).decode(encodedSegments.get(1)); + } else { + getSegment(1).setFieldValue(gpcSegmentIncludedKey, Boolean.FALSE); + } + } + + @Override + protected final CharSequence doEncode() { + int size = size(); + List encodedSegments = new ArrayList<>(size); + + encodedSegments.add(getSegment(0).encodeCharSequence()); + if(size >= 2 && getGpcSegmentIncluded()) { + encodedSegments.add(getSegment(1).encodeCharSequence()); + } + + return SlicedCharSequence.join('.', encodedSegments); + } + + public abstract Integer getGpcSegmentType(); + + public Boolean getGpcSegmentIncluded() { + return (Boolean) getSegment(1).getFieldValue(getGpcSegmentIncludedKey()); + } + + public abstract Boolean getGpc(); +} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java index 86567df3..7319eeae 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java @@ -1,12 +1,10 @@ package com.iab.gpp.encoder.section; -import java.util.ArrayList; -import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsCaField; import com.iab.gpp.encoder.segment.Base64Segment; -public class UsCa extends EncodableSection { +public class UsCa extends AbstractUsSectionWithGpc { public static final int ID = 8; public static final int VERSION = 1; @@ -37,35 +35,10 @@ public int getVersion() { } @Override - protected void doDecode(CharSequence encodedString) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - int numEncodedSegments = encodedSegments.size(); - - if (numEncodedSegments > 0) { - getSegment(0).decode(encodedSegments.get(0)); - } - - if (numEncodedSegments > 1) { - getSegment(1).setFieldValue(UsCaField.GPC_SEGMENT_INCLUDED, true); - getSegment(1).decode(encodedSegments.get(1)); - } else { - getSegment(1).setFieldValue(UsCaField.GPC_SEGMENT_INCLUDED, false); - } - } - - @Override - protected CharSequence doEncode() { - List encodedSegments = new ArrayList<>(size()); - - encodedSegments.add(getSegment(0).encodeCharSequence()); - if(size() >= 2 && getSegment(1).getFieldValue(UsCaField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(getSegment(1).encodeCharSequence()); - } - - return SlicedCharSequence.join('.', encodedSegments); + protected final UsCaField getGpcSegmentIncludedKey() { + return UsCaField.GPC_SEGMENT_INCLUDED; } - public Integer getSaleOptOutNotice() { return (Integer) this.getFieldValue(UsCaField.SALE_OPT_OUT_NOTICE); } @@ -114,10 +87,6 @@ public Integer getGpcSegmentType() { return (Integer) this.getFieldValue(UsCaField.GPC_SEGMENT_TYPE); } - public Boolean getGpcSegmentIncluded() { - return (Boolean) this.getFieldValue(UsCaField.GPC_SEGMENT_INCLUDED); - } - public Boolean getGpc() { return (Boolean) this.getFieldValue(UsCaField.GPC); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java index 3ced2d1b..8adad7f5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java @@ -1,12 +1,10 @@ package com.iab.gpp.encoder.section; -import java.util.ArrayList; -import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsCoField; import com.iab.gpp.encoder.segment.Base64Segment; -public class UsCo extends EncodableSection { +public class UsCo extends AbstractUsSectionWithGpc { public static final int ID = 10; public static final int VERSION = 1; @@ -37,35 +35,10 @@ public int getVersion() { } @Override - protected void doDecode(CharSequence encodedString) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - int numEncodedSegments = encodedSegments.size(); - - if (numEncodedSegments > 0) { - getSegment(0).decode(encodedSegments.get(0)); - } - - if (numEncodedSegments > 1) { - getSegment(1).setFieldValue(UsCoField.GPC_SEGMENT_INCLUDED, true); - getSegment(1).decode(encodedSegments.get(1)); - } else { - getSegment(1).setFieldValue(UsCoField.GPC_SEGMENT_INCLUDED, false); - } - } - - @Override - protected CharSequence doEncode() { - List encodedSegments = new ArrayList<>(size()); - - encodedSegments.add(getSegment(0).encodeCharSequence()); - if(size() >= 2 && getSegment(1).getFieldValue(UsCoField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(getSegment(1).encodeCharSequence()); - } - - return SlicedCharSequence.join('.', encodedSegments); + protected final UsCoField getGpcSegmentIncludedKey() { + return UsCoField.GPC_SEGMENT_INCLUDED; } - public Integer getSharingNotice() { return (Integer) this.getFieldValue(UsCoField.SHARING_NOTICE); } @@ -110,10 +83,6 @@ public Integer getGpcSegmentType() { return (Integer) this.getFieldValue(UsCoField.GPC_SEGMENT_TYPE); } - public Boolean getGpcSegmentIncluded() { - return (Boolean) this.getFieldValue(UsCoField.GPC_SEGMENT_INCLUDED); - } - public Boolean getGpc() { return (Boolean) this.getFieldValue(UsCoField.GPC); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java index 3773b469..d1f06d17 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java @@ -1,12 +1,10 @@ package com.iab.gpp.encoder.section; -import java.util.ArrayList; -import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsCtField; import com.iab.gpp.encoder.segment.Base64Segment; -public class UsCt extends EncodableSection { +public class UsCt extends AbstractUsSectionWithGpc { public static final int ID = 12; public static final int VERSION = 1; @@ -37,35 +35,10 @@ public int getVersion() { } @Override - protected void doDecode(CharSequence encodedString) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - int numEncodedSegments = encodedSegments.size(); - - if (numEncodedSegments > 0) { - getSegment(0).decode(encodedSegments.get(0)); - } - - if (numEncodedSegments > 1) { - getSegment(1).setFieldValue(UsCtField.GPC_SEGMENT_INCLUDED, true); - getSegment(1).decode(encodedSegments.get(1)); - } else { - getSegment(1).setFieldValue(UsCtField.GPC_SEGMENT_INCLUDED, false); - } - } - - @Override - protected CharSequence doEncode() { - List encodedSegments = new ArrayList<>(size()); - - encodedSegments.add(getSegment(0).encodeCharSequence()); - if(size() >= 2 && getSegment(1).getFieldValue(UsCtField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(getSegment(1).encodeCharSequence()); - } - - return SlicedCharSequence.join('.', encodedSegments); + protected final UsCtField getGpcSegmentIncludedKey() { + return UsCtField.GPC_SEGMENT_INCLUDED; } - public Integer getSharingNotice() { return (Integer) this.getFieldValue(UsCtField.SHARING_NOTICE); } @@ -110,10 +83,6 @@ public Integer getGpcSegmentType() { return (Integer) this.getFieldValue(UsCtField.GPC_SEGMENT_TYPE); } - public Boolean getGpcSegmentIncluded() { - return (Boolean) this.getFieldValue(UsCtField.GPC_SEGMENT_INCLUDED); - } - public Boolean getGpc() { return (Boolean) this.getFieldValue(UsCtField.GPC); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java index 8ac0838e..a0ddd15e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java @@ -1,12 +1,10 @@ package com.iab.gpp.encoder.section; -import java.util.ArrayList; -import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsDeField; import com.iab.gpp.encoder.segment.Base64Segment; -public class UsDe extends EncodableSection { +public class UsDe extends AbstractUsSectionWithGpc { public static final int ID = 17; public static final int VERSION = 1; @@ -37,35 +35,10 @@ public int getVersion() { } @Override - protected void doDecode(CharSequence encodedString) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - int numEncodedSegments = encodedSegments.size(); - - if (numEncodedSegments > 0) { - getSegment(0).decode(encodedSegments.get(0)); - } - - if (numEncodedSegments > 1) { - getSegment(1).setFieldValue(UsDeField.GPC_SEGMENT_INCLUDED, true); - getSegment(1).decode(encodedSegments.get(1)); - } else { - getSegment(1).setFieldValue(UsDeField.GPC_SEGMENT_INCLUDED, false); - } - } - - @Override - protected CharSequence doEncode() { - List encodedSegments = new ArrayList<>(size()); - - encodedSegments.add(getSegment(0).encodeCharSequence()); - if (size() >= 2 && getSegment(1).getFieldValue(UsDeField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(getSegment(1).encodeCharSequence()); - } - - return SlicedCharSequence.join('.', encodedSegments); + protected final UsDeField getGpcSegmentIncludedKey() { + return UsDeField.GPC_SEGMENT_INCLUDED; } - public Integer getProcessingNotice() { return (Integer) this.getFieldValue(UsDeField.PROCESSING_NOTICE); } @@ -114,10 +87,6 @@ public Integer getGpcSegmentType() { return (Integer) this.getFieldValue(UsDeField.GPC_SEGMENT_TYPE); } - public Boolean getGpcSegmentIncluded() { - return (Boolean) this.getFieldValue(UsDeField.GPC_SEGMENT_INCLUDED); - } - public Boolean getGpc() { return (Boolean) this.getFieldValue(UsDeField.GPC); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java index be6c7aa8..c967faf7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java @@ -4,7 +4,7 @@ import com.iab.gpp.encoder.field.UsFlField; import com.iab.gpp.encoder.segment.Base64Segment; -public class UsFl extends EncodableSection { +public class UsFl extends AbstractUsSection { public static final int ID = 13; public static final int VERSION = 1; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java index 9a409953..65445d6a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java @@ -1,12 +1,10 @@ package com.iab.gpp.encoder.section; -import java.util.ArrayList; -import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsIaField; import com.iab.gpp.encoder.segment.Base64Segment; -public class UsIa extends EncodableSection { +public class UsIa extends AbstractUsSectionWithGpc { public static final int ID = 18; public static final int VERSION = 1; @@ -37,35 +35,10 @@ public int getVersion() { } @Override - protected void doDecode(CharSequence encodedString) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - int numEncodedSegments = encodedSegments.size(); - - if (numEncodedSegments > 0) { - getSegment(0).decode(encodedSegments.get(0)); - } - - if (numEncodedSegments > 1) { - getSegment(1).setFieldValue(UsIaField.GPC_SEGMENT_INCLUDED, true); - getSegment(1).decode(encodedSegments.get(1)); - } else { - getSegment(1).setFieldValue(UsIaField.GPC_SEGMENT_INCLUDED, false); - } - } - - @Override - protected CharSequence doEncode() { - List encodedSegments = new ArrayList<>(size()); - - encodedSegments.add(getSegment(0).encodeCharSequence()); - if (size() >= 2 && getSegment(1).getFieldValue(UsIaField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(getSegment(1).encodeCharSequence()); - } - - return SlicedCharSequence.join('.', encodedSegments); + protected final UsIaField getGpcSegmentIncludedKey() { + return UsIaField.GPC_SEGMENT_INCLUDED; } - public Integer getProcessingNotice() { return (Integer) this.getFieldValue(UsIaField.PROCESSING_NOTICE); } @@ -114,10 +87,6 @@ public Integer getGpcSegmentType() { return (Integer) this.getFieldValue(UsIaField.GPC_SEGMENT_TYPE); } - public Boolean getGpcSegmentIncluded() { - return (Boolean) this.getFieldValue(UsIaField.GPC_SEGMENT_INCLUDED); - } - public Boolean getGpc() { return (Boolean) this.getFieldValue(UsIaField.GPC); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java index afbb1c0c..1168a0f0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java @@ -1,12 +1,10 @@ package com.iab.gpp.encoder.section; -import java.util.ArrayList; -import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsMtField; import com.iab.gpp.encoder.segment.Base64Segment; -public class UsMt extends EncodableSection { +public class UsMt extends AbstractUsSectionWithGpc { public static final int ID = 14; public static final int VERSION = 1; @@ -37,35 +35,10 @@ public int getVersion() { } @Override - protected void doDecode(CharSequence encodedString) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - int numEncodedSegments = encodedSegments.size(); - - if (numEncodedSegments > 0) { - getSegment(0).decode(encodedSegments.get(0)); - } - - if (numEncodedSegments > 1) { - getSegment(1).setFieldValue(UsMtField.GPC_SEGMENT_INCLUDED, true); - getSegment(1).decode(encodedSegments.get(1)); - } else { - getSegment(1).setFieldValue(UsMtField.GPC_SEGMENT_INCLUDED, false); - } - } - - @Override - protected CharSequence doEncode() { - List encodedSegments = new ArrayList<>(size()); - - encodedSegments.add(getSegment(0).encodeCharSequence()); - if(size() >= 2 && getSegment(1).getFieldValue(UsMtField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(getSegment(1).encodeCharSequence()); - } - - return SlicedCharSequence.join('.', encodedSegments); + protected final UsMtField getGpcSegmentIncludedKey() { + return UsMtField.GPC_SEGMENT_INCLUDED; } - public Integer getSharingNotice() { return (Integer) this.getFieldValue(UsMtField.SHARING_NOTICE); } @@ -114,10 +87,6 @@ public Integer getGpcSegmentType() { return (Integer) this.getFieldValue(UsMtField.GPC_SEGMENT_TYPE); } - public Boolean getGpcSegmentIncluded() { - return (Boolean) this.getFieldValue(UsMtField.GPC_SEGMENT_INCLUDED); - } - public Boolean getGpc() { return (Boolean) this.getFieldValue(UsMtField.GPC); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java index a99d1f07..19de1529 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java @@ -1,13 +1,11 @@ package com.iab.gpp.encoder.section; -import java.util.ArrayList; -import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsNatField; import com.iab.gpp.encoder.segment.Base64Segment; import com.iab.gpp.encoder.segment.UsNatCoreSegment; -public class UsNat extends EncodableSection { +public class UsNat extends AbstractUsSectionWithGpc { public static final int ID = 7; public static final int VERSION = 1; @@ -39,35 +37,10 @@ public int getVersion() { } @Override - protected void doDecode(CharSequence encodedString) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - int numEncodedSegments = encodedSegments.size(); - - if (numEncodedSegments > 0) { - getSegment(0).decode(encodedSegments.get(0)); - } - - if (numEncodedSegments > 1) { - getSegment(1).setFieldValue(UsNatField.GPC_SEGMENT_INCLUDED, true); - getSegment(1).decode(encodedSegments.get(1)); - } else { - getSegment(1).setFieldValue(UsNatField.GPC_SEGMENT_INCLUDED, false); - } - } - - @Override - protected CharSequence doEncode() { - List encodedSegments = new ArrayList<>(size()); - - encodedSegments.add(getSegment(0).encodeCharSequence()); - if(size() >= 2 && getSegment(1).getFieldValue(UsNatField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(getSegment(1).encodeCharSequence()); - } - - return SlicedCharSequence.join('.', encodedSegments); + protected final UsNatField getGpcSegmentIncludedKey() { + return UsNatField.GPC_SEGMENT_INCLUDED; } - public Integer getSharingNotice() { return (Integer) this.getFieldValue(UsNatField.SHARING_NOTICE); } @@ -132,10 +105,6 @@ public Integer getGpcSegmentType() { return (Integer) this.getFieldValue(UsNatField.GPC_SEGMENT_TYPE); } - public Boolean getGpcSegmentIncluded() { - return (Boolean) this.getFieldValue(UsNatField.GPC_SEGMENT_INCLUDED); - } - public Boolean getGpc() { return (Boolean) this.getFieldValue(UsNatField.GPC); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java index 777e0c26..f4232999 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java @@ -1,12 +1,10 @@ package com.iab.gpp.encoder.section; -import java.util.ArrayList; -import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsNeField; import com.iab.gpp.encoder.segment.Base64Segment; -public class UsNe extends EncodableSection { +public class UsNe extends AbstractUsSectionWithGpc { public static final int ID = 19; public static final int VERSION = 1; @@ -37,32 +35,8 @@ public int getVersion() { } @Override - protected void doDecode(CharSequence encodedString) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - int numEncodedSegments = encodedSegments.size(); - - if (numEncodedSegments > 0) { - getSegment(0).decode(encodedSegments.get(0)); - } - - if (numEncodedSegments > 1) { - getSegment(1).setFieldValue(UsNeField.GPC_SEGMENT_INCLUDED, true); - getSegment(1).decode(encodedSegments.get(1)); - } else { - getSegment(1).setFieldValue(UsNeField.GPC_SEGMENT_INCLUDED, false); - } - } - - @Override - protected CharSequence doEncode() { - List encodedSegments = new ArrayList<>(size()); - - encodedSegments.add(getSegment(0).encodeCharSequence()); - if(size() >= 2 && getSegment(1).getFieldValue(UsNeField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(getSegment(1).encodeCharSequence()); - } - - return SlicedCharSequence.join('.', encodedSegments); + protected final UsNeField getGpcSegmentIncludedKey() { + return UsNeField.GPC_SEGMENT_INCLUDED; } @@ -114,10 +88,6 @@ public Integer getGpcSegmentType() { return (Integer) this.getFieldValue(UsNeField.GPC_SEGMENT_TYPE); } - public Boolean getGpcSegmentIncluded() { - return (Boolean) this.getFieldValue(UsNeField.GPC_SEGMENT_INCLUDED); - } - public Boolean getGpc() { return (Boolean) this.getFieldValue(UsNeField.GPC); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java index 9d9362f7..53bbd2d3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java @@ -1,12 +1,10 @@ package com.iab.gpp.encoder.section; -import java.util.ArrayList; -import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsNhField; import com.iab.gpp.encoder.segment.Base64Segment; -public class UsNh extends EncodableSection { +public class UsNh extends AbstractUsSectionWithGpc { public static final int ID = 20; public static final int VERSION = 1; @@ -37,35 +35,10 @@ public int getVersion() { } @Override - protected void doDecode(CharSequence encodedString) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - int numEncodedSegments = encodedSegments.size(); - - if (numEncodedSegments > 0) { - getSegment(0).decode(encodedSegments.get(0)); - } - - if (numEncodedSegments > 1) { - getSegment(1).setFieldValue(UsNhField.GPC_SEGMENT_INCLUDED, true); - getSegment(1).decode(encodedSegments.get(1)); - } else { - getSegment(1).setFieldValue(UsNhField.GPC_SEGMENT_INCLUDED, false); - } - } - - @Override - protected CharSequence doEncode() { - List encodedSegments = new ArrayList<>(size()); - - encodedSegments.add(getSegment(0).encodeCharSequence()); - if(size() >= 2 && getSegment(1).getFieldValue(UsNhField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(getSegment(1).encodeCharSequence()); - } - - return SlicedCharSequence.join('.', encodedSegments); + protected final UsNhField getGpcSegmentIncludedKey() { + return UsNhField.GPC_SEGMENT_INCLUDED; } - public Integer getProcessingNotice() { return (Integer) this.getFieldValue(UsNhField.PROCESSING_NOTICE); } @@ -114,10 +87,6 @@ public Integer getGpcSegmentType() { return (Integer) this.getFieldValue(UsNhField.GPC_SEGMENT_TYPE); } - public Boolean getGpcSegmentIncluded() { - return (Boolean) this.getFieldValue(UsNhField.GPC_SEGMENT_INCLUDED); - } - public Boolean getGpc() { return (Boolean) this.getFieldValue(UsNhField.GPC); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java index 5d4ea71b..8d3714f6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java @@ -1,12 +1,10 @@ package com.iab.gpp.encoder.section; -import java.util.ArrayList; -import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsNjField; import com.iab.gpp.encoder.segment.Base64Segment; -public class UsNj extends EncodableSection { +public class UsNj extends AbstractUsSectionWithGpc { public static final int ID = 21; public static final int VERSION = 1; @@ -37,35 +35,10 @@ public int getVersion() { } @Override - protected void doDecode(CharSequence encodedString) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - int numEncodedSegments = encodedSegments.size(); - - if (numEncodedSegments > 0) { - getSegment(0).decode(encodedSegments.get(0)); - } - - if (numEncodedSegments > 1) { - getSegment(1).setFieldValue(UsNjField.GPC_SEGMENT_INCLUDED, true); - getSegment(1).decode(encodedSegments.get(1)); - } else { - getSegment(1).setFieldValue(UsNjField.GPC_SEGMENT_INCLUDED, false); - } - } - - @Override - protected CharSequence doEncode() { - List encodedSegments = new ArrayList<>(size()); - - encodedSegments.add(getSegment(0).encodeCharSequence()); - if(size() >= 2 && getSegment(1).getFieldValue(UsNjField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(getSegment(1).encodeCharSequence()); - } - - return SlicedCharSequence.join('.', encodedSegments); + protected final UsNjField getGpcSegmentIncludedKey() { + return UsNjField.GPC_SEGMENT_INCLUDED; } - public Integer getProcessingNotice() { return (Integer) this.getFieldValue(UsNjField.PROCESSING_NOTICE); } @@ -114,10 +87,6 @@ public Integer getGpcSegmentType() { return (Integer) this.getFieldValue(UsNjField.GPC_SEGMENT_TYPE); } - public Boolean getGpcSegmentIncluded() { - return (Boolean) this.getFieldValue(UsNjField.GPC_SEGMENT_INCLUDED); - } - public Boolean getGpc() { return (Boolean) this.getFieldValue(UsNjField.GPC); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java index 31b2427e..4de29c8f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java @@ -1,12 +1,10 @@ package com.iab.gpp.encoder.section; -import java.util.ArrayList; -import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsOrField; import com.iab.gpp.encoder.segment.Base64Segment; -public class UsOr extends EncodableSection { +public class UsOr extends AbstractUsSectionWithGpc { public static final int ID = 15; public static final int VERSION = 1; @@ -37,35 +35,10 @@ public int getVersion() { } @Override - protected void doDecode(CharSequence encodedString) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - int numEncodedSegments = encodedSegments.size(); - - if (numEncodedSegments > 0) { - getSegment(0).decode(encodedSegments.get(0)); - } - - if (numEncodedSegments > 1) { - getSegment(1).setFieldValue(UsOrField.GPC_SEGMENT_INCLUDED, true); - getSegment(1).decode(encodedSegments.get(1)); - } else { - getSegment(1).setFieldValue(UsOrField.GPC_SEGMENT_INCLUDED, false); - } - } - - @Override - protected CharSequence doEncode() { - List encodedSegments = new ArrayList<>(size()); - - encodedSegments.add(getSegment(0).encodeCharSequence()); - if(size() >= 2 && getSegment(1).getFieldValue(UsOrField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(getSegment(1).encodeCharSequence()); - } - - return SlicedCharSequence.join('.', encodedSegments); + protected final UsOrField getGpcSegmentIncludedKey() { + return UsOrField.GPC_SEGMENT_INCLUDED; } - public Integer getProcessingNotice() { return (Integer) this.getFieldValue(UsOrField.PROCESSING_NOTICE); } @@ -114,10 +87,6 @@ public Integer getGpcSegmentType() { return (Integer) this.getFieldValue(UsOrField.GPC_SEGMENT_TYPE); } - public Boolean getGpcSegmentIncluded() { - return (Boolean) this.getFieldValue(UsOrField.GPC_SEGMENT_INCLUDED); - } - public Boolean getGpc() { return (Boolean) this.getFieldValue(UsOrField.GPC); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java index 259751b4..504bb7da 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java @@ -1,12 +1,10 @@ package com.iab.gpp.encoder.section; -import java.util.ArrayList; -import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsTnField; import com.iab.gpp.encoder.segment.Base64Segment; -public class UsTn extends EncodableSection { +public class UsTn extends AbstractUsSectionWithGpc { public static final int ID = 22; public static final int VERSION = 1; @@ -37,35 +35,10 @@ public int getVersion() { } @Override - protected void doDecode(CharSequence encodedString) { - List encodedSegments = SlicedCharSequence.split(encodedString,'.'); - int numEncodedSegments = encodedSegments.size(); - - if(numEncodedSegments > 0) { - getSegment(0).decode(encodedSegments.get(0)); - } - - if(numEncodedSegments > 1) { - getSegment(1).setFieldValue(UsTnField.GPC_SEGMENT_INCLUDED, true); - getSegment(1).decode(encodedSegments.get(1)); - } else { - getSegment(1).setFieldValue(UsTnField.GPC_SEGMENT_INCLUDED, false); - } - } - - @Override - protected CharSequence doEncode() { - List encodedSegments = new ArrayList<>(size()); - - encodedSegments.add(getSegment(0).encodeCharSequence()); - if(size() >= 2 && getSegment(1).getFieldValue(UsTnField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(getSegment(1).encodeCharSequence()); - } - - return SlicedCharSequence.join('.', encodedSegments); + protected final UsTnField getGpcSegmentIncludedKey() { + return UsTnField.GPC_SEGMENT_INCLUDED; } - public Integer getProcessingNotice() { return (Integer) this.getFieldValue(UsTnField.PROCESSING_NOTICE); } @@ -114,10 +87,6 @@ public Integer getGpcSegmentType() { return (Integer) this.getFieldValue(UsTnField.GPC_SEGMENT_TYPE); } - public Boolean getGpcSegmentIncluded() { - return (Boolean) this.getFieldValue(UsTnField.GPC_SEGMENT_INCLUDED); - } - public Boolean getGpc() { return (Boolean) this.getFieldValue(UsTnField.GPC); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java index cb77ca3a..4dce1398 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java @@ -1,12 +1,10 @@ package com.iab.gpp.encoder.section; -import java.util.ArrayList; -import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsTxField; import com.iab.gpp.encoder.segment.Base64Segment; -public class UsTx extends EncodableSection { +public class UsTx extends AbstractUsSectionWithGpc { public static final int ID = 16; public static final int VERSION = 1; @@ -37,35 +35,10 @@ public int getVersion() { } @Override - protected void doDecode(CharSequence encodedString) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - int numEncodedSegments = encodedSegments.size(); - - if (numEncodedSegments > 0) { - getSegment(0).decode(encodedSegments.get(0)); - } - - if (numEncodedSegments > 1) { - getSegment(1).setFieldValue(UsTxField.GPC_SEGMENT_INCLUDED, true); - getSegment(1).decode(encodedSegments.get(1)); - } else { - getSegment(1).setFieldValue(UsTxField.GPC_SEGMENT_INCLUDED, false); - } - } - - @Override - protected CharSequence doEncode() { - List encodedSegments = new ArrayList<>(size()); - - encodedSegments.add(getSegment(0).encodeCharSequence()); - if(size() >= 2 && getSegment(1).getFieldValue(UsTxField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(getSegment(1).encodeCharSequence()); - } - - return SlicedCharSequence.join('.', encodedSegments); + protected final UsTxField getGpcSegmentIncludedKey() { + return UsTxField.GPC_SEGMENT_INCLUDED; } - public Integer getProcessingNotice() { return (Integer) this.getFieldValue(UsTxField.PROCESSING_NOTICE); } @@ -114,10 +87,6 @@ public Integer getGpcSegmentType() { return (Integer) this.getFieldValue(UsTxField.GPC_SEGMENT_TYPE); } - public Boolean getGpcSegmentIncluded() { - return (Boolean) this.getFieldValue(UsTxField.GPC_SEGMENT_INCLUDED); - } - public Boolean getGpc() { return (Boolean) this.getFieldValue(UsTxField.GPC); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java index 1fcd44d0..8c0cc9da 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java @@ -4,7 +4,7 @@ import com.iab.gpp.encoder.field.UsUtField; import com.iab.gpp.encoder.segment.Base64Segment; -public class UsUt extends EncodableSection { +public class UsUt extends AbstractUsSection { public static final int ID = 11; public static final int VERSION = 1; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java index 784fe826..8b8eec58 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java @@ -4,7 +4,7 @@ import com.iab.gpp.encoder.field.UsVaField; import com.iab.gpp.encoder.segment.Base64Segment; -public class UsVa extends EncodableSection { +public class UsVa extends AbstractUsSection { public static final int ID = 9; public static final int VERSION = 1; From 6e3bb4d2290308e2c2347cf5fa89c0c70f6c92db Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 10 Feb 2026 14:37:46 -0500 Subject: [PATCH 69/86] cleanup --- .../java/com/iab/gpp/encoder/section/AbstractUsSection.java | 5 +---- .../iab/gpp/encoder/section/AbstractUsSectionWithGpc.java | 1 - 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractUsSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractUsSection.java index cd7d1714..f934b161 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractUsSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractUsSection.java @@ -1,10 +1,6 @@ package com.iab.gpp.encoder.section; -import java.util.ArrayList; -import java.util.List; -import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.FieldKey; -import com.iab.gpp.encoder.field.UsCaField; import com.iab.gpp.encoder.segment.EncodableSegment; public abstract class AbstractUsSection & FieldKey> extends EncodableSection { @@ -13,4 +9,5 @@ public abstract class AbstractUsSection & FieldKey> extends En protected AbstractUsSection(EncodableSegment... segments) { super(segments); } + } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractUsSectionWithGpc.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractUsSectionWithGpc.java index f04ed5ad..2c7c0390 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractUsSectionWithGpc.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractUsSectionWithGpc.java @@ -3,7 +3,6 @@ import java.util.ArrayList; import java.util.List; import com.iab.gpp.encoder.field.FieldKey; -import com.iab.gpp.encoder.field.UsNeField; import com.iab.gpp.encoder.segment.EncodableSegment; public abstract class AbstractUsSectionWithGpc & FieldKey> extends AbstractUsSection { From 6be47f5976a66b999e1eeb007b227507a7ecd657 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 10 Feb 2026 15:46:19 -0500 Subject: [PATCH 70/86] fix deriveds --- .../datatype/EncodableFlexibleBitfield.java | 12 +++++------ .../iab/gpp/encoder/field/TcfCaV1Field.java | 4 ++-- .../iab/gpp/encoder/field/TcfEuV2Field.java | 4 ++-- .../AbstractLazilyEncodableSegment.java | 3 +-- .../gpp/encoder/segment/EncodableSegment.java | 6 +++--- .../encoder/segment/SegmentValueProvider.java | 20 +++++++++++++++++++ 6 files changed, 34 insertions(+), 15 deletions(-) create mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/SegmentValueProvider.java diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java index b8842528..d6a48a11 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java @@ -1,20 +1,20 @@ package com.iab.gpp.encoder.datatype; import java.util.Collection; -import java.util.function.ToIntFunction; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedBitfieldEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.field.FieldKey; +import com.iab.gpp.encoder.segment.SegmentValueProvider; import com.iab.gpp.encoder.segment.EncodableSegment; public final class EncodableFlexibleBitfield & FieldKey> extends AbstractDirtyableBitStringDataType { - private final ToIntFunction> getLengthSupplier; + private final SegmentValueProvider getLengthSupplier; - public EncodableFlexibleBitfield(ToIntFunction> getLengthSupplier) { - this.getLengthSupplier = getLengthSupplier; + public EncodableFlexibleBitfield(E key) { + this.getLengthSupplier = new SegmentValueProvider<>(key); } @Override @@ -25,7 +25,7 @@ protected IntegerSet initialize() { @Override protected void encode(BitString builder, IntegerSet value, EncodableSegment segment) { try { - FixedBitfieldEncoder.encode(builder, value, this.getLengthSupplier.applyAsInt(segment)); + FixedBitfieldEncoder.encode(builder, value, this.getLengthSupplier.extract(segment)); } catch (Exception e) { throw new EncodingException(e); } @@ -34,7 +34,7 @@ protected void encode(BitString builder, IntegerSet value, EncodableSegment s @Override protected IntegerSet decode(BitString reader, EncodableSegment segment) { try { - return reader.readIntegerSet(getLengthSupplier.applyAsInt(segment)); + return reader.readIntegerSet(getLengthSupplier.extract(segment)); } catch (Exception e) { throw new DecodingException(e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java index 32628858..8d8c19e1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java @@ -33,8 +33,8 @@ public enum TcfCaV1Field implements FieldKey { PUB_PURPOSES_EXPRESS_CONSENT("PubPurposesExpressConsent", new EncodableFixedBitfield<>(24)), PUB_PURPOSES_IMPLIED_CONSENT("PubPurposesImpliedConsent", new EncodableFixedBitfield<>(24)), NUM_CUSTOM_PURPOSES("NumCustomPurposes", new EncodableFixedInteger<>(6, 0)), - CUSTOM_PURPOSES_EXPRESS_CONSENT("CustomPurposesExpressConsent", new EncodableFlexibleBitfield(segment -> (Integer) segment.getFieldValueUnsafe(TcfCaV1Field.NUM_CUSTOM_PURPOSES))), - CUSTOM_PURPOSES_IMPLIED_CONSENT("CustomPurposesImpliedConsent", new EncodableFlexibleBitfield(segment -> (Integer) segment.getFieldValueUnsafe(TcfCaV1Field.NUM_CUSTOM_PURPOSES))), + CUSTOM_PURPOSES_EXPRESS_CONSENT("CustomPurposesExpressConsent", new EncodableFlexibleBitfield<>(TcfCaV1Field.NUM_CUSTOM_PURPOSES)), + CUSTOM_PURPOSES_IMPLIED_CONSENT("CustomPurposesImpliedConsent", new EncodableFlexibleBitfield<>(TcfCaV1Field.NUM_CUSTOM_PURPOSES)), DISCLOSED_VENDORS_SEGMENT_TYPE("DisclosedVendorsSegmentType", new EncodableFixedInteger<>(3, 1)), DISCLOSED_VENDORS("DisclosedVendors", new EncodableOptimizedFixedRange<>()); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java index 0d383908..796a23ea 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java @@ -35,8 +35,8 @@ public enum TcfEuV2Field implements FieldKey { PUBLISHER_CONSENTS("PublisherConsents", new EncodableFixedBitfield<>(24)), PUBLISHER_LEGITIMATE_INTERESTS("PublisherLegitimateInterests", new EncodableFixedBitfield<>(24)), NUM_CUSTOM_PURPOSES("NumCustomPurposes", new EncodableFixedInteger<>(6, 0)), - PUBLISHER_CUSTOM_CONSENTS("PublisherCustomConsents", new EncodableFlexibleBitfield(segment -> (Integer) segment.getFieldValueUnsafe(TcfEuV2Field.NUM_CUSTOM_PURPOSES))), - PUBLISHER_CUSTOM_LEGITIMATE_INTERESTS("PublisherCustomLegitimateInterests", new EncodableFlexibleBitfield(segment -> (Integer) segment.getFieldValueUnsafe(TcfEuV2Field.NUM_CUSTOM_PURPOSES))), + PUBLISHER_CUSTOM_CONSENTS("PublisherCustomConsents", new EncodableFlexibleBitfield<>(TcfEuV2Field.NUM_CUSTOM_PURPOSES)), + PUBLISHER_CUSTOM_LEGITIMATE_INTERESTS("PublisherCustomLegitimateInterests", new EncodableFlexibleBitfield<>(TcfEuV2Field.NUM_CUSTOM_PURPOSES)), VENDORS_ALLOWED_SEGMENT_TYPE("VendorsAllowedSegmentType", new EncodableFixedInteger<>(3, 2)), VENDORS_ALLOWED("VendorsAllowed", new EncodableOptimizedFixedRange<>()), VENDORS_DISCLOSED_SEGMENT_TYPE("VendorsDisclosedSegmentType", new EncodableFixedInteger<>(3, 1)), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java index 3fbf06c5..324931db 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java @@ -63,9 +63,8 @@ public final Object getFieldValue(E fieldName) { return getFieldValueUnsafe(fieldName); } - // TODO: try to hide this @Override - public final Object getFieldValueUnsafe(E fieldName) { + protected final Object getFieldValueUnsafe(E fieldName) { Integer index = fieldNames.getIndex(fieldName); if (index != null) { return fieldNames.getType(index).get(values, index); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java index d96424d7..30654a43 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java @@ -5,12 +5,12 @@ public abstract class EncodableSegment & FieldKey> extends AbstractEncodable { public abstract E resolveKey(FieldKey fieldName); - + public abstract boolean hasField(E fieldName); public abstract Object getFieldValue(E fieldName); - - public abstract Object getFieldValueUnsafe(E fieldName); + + protected abstract Object getFieldValueUnsafe(E key); public abstract void setFieldValue(E fieldName, Object value); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/SegmentValueProvider.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/SegmentValueProvider.java new file mode 100644 index 00000000..52c2a61d --- /dev/null +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/SegmentValueProvider.java @@ -0,0 +1,20 @@ +package com.iab.gpp.encoder.segment; + +import com.iab.gpp.encoder.field.FieldKey; + +public class SegmentValueProvider & FieldKey> { + private final E key; + + public SegmentValueProvider(E key) { + this.key = key; + } + + public int modify(int original) { + return original; + } + + public final int extract(EncodableSegment segment) { + return (Integer) segment.getFieldValueUnsafe(key); + } + +} From bff7d39b64c251e3e718c2637d9ffa985f60a604 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 10 Feb 2026 16:39:39 -0500 Subject: [PATCH 71/86] move name --- .../AbstractDirtyableBitStringDataType.java | 5 ++ .../AbstractEncodableBitStringDataType.java | 5 ++ .../iab/gpp/encoder/datatype/DataType.java | 12 ++- .../EncodableArrayOfFixedIntegerRanges.java | 3 +- .../encoder/datatype/EncodableBoolean.java | 3 +- .../encoder/datatype/EncodableDatetime.java | 4 + .../datatype/EncodableFibonacciInteger.java | 3 +- .../EncodableFibonacciIntegerRange.java | 4 + .../datatype/EncodableFixedBitfield.java | 3 +- .../datatype/EncodableFixedInteger.java | 8 +- .../datatype/EncodableFixedIntegerList.java | 4 +- .../datatype/EncodableFixedIntegerRange.java | 4 + .../datatype/EncodableFixedString.java | 3 +- .../datatype/EncodableFlexibleBitfield.java | 3 +- .../EncodableOptimizedFixedRange.java | 4 + .../encoder/datatype/UnencodableBoolean.java | 3 +- .../datatype/UnencodableCharacter.java | 4 +- .../encoder/datatype/UnencodableInteger.java | 3 +- .../com/iab/gpp/encoder/field/FieldKey.java | 1 - .../com/iab/gpp/encoder/field/FieldNames.java | 12 +-- .../iab/gpp/encoder/field/HeaderV1Field.java | 15 +--- .../iab/gpp/encoder/field/TcfCaV1Field.java | 57 +++++++------- .../iab/gpp/encoder/field/TcfEuV2Field.java | 67 ++++++++--------- .../com/iab/gpp/encoder/field/UsCaField.java | 59 +++++++-------- .../com/iab/gpp/encoder/field/UsCoField.java | 55 ++++++-------- .../com/iab/gpp/encoder/field/UsCtField.java | 55 ++++++-------- .../com/iab/gpp/encoder/field/UsDeField.java | 61 +++++++-------- .../com/iab/gpp/encoder/field/UsFlField.java | 53 ++++++------- .../com/iab/gpp/encoder/field/UsIaField.java | 61 +++++++-------- .../com/iab/gpp/encoder/field/UsMtField.java | 59 +++++++-------- .../com/iab/gpp/encoder/field/UsNatField.java | 75 +++++++++---------- .../com/iab/gpp/encoder/field/UsNeField.java | 61 +++++++-------- .../com/iab/gpp/encoder/field/UsNhField.java | 59 +++++++-------- .../com/iab/gpp/encoder/field/UsNjField.java | 59 +++++++-------- .../com/iab/gpp/encoder/field/UsOrField.java | 59 +++++++-------- .../com/iab/gpp/encoder/field/UsTnField.java | 61 +++++++-------- .../com/iab/gpp/encoder/field/UsTxField.java | 61 +++++++-------- .../com/iab/gpp/encoder/field/UsUtField.java | 55 ++++++-------- .../com/iab/gpp/encoder/field/UsVaField.java | 51 ++++++------- .../com/iab/gpp/encoder/field/UspV1Field.java | 17 ++--- .../segment/AbstractBase64Segment.java | 22 ++---- .../AbstractLazilyEncodableSegment.java | 20 ++--- .../EncodableFixedIntegerRangeTest.java | 8 +- .../EncodableOptimizedFixedRangeTest.java | 2 +- .../datatype/FixedIntegerListEncoderTest.java | 2 +- 45 files changed, 561 insertions(+), 684 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java index 24aa5c0b..8b88c1a4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java @@ -1,5 +1,6 @@ package com.iab.gpp.encoder.datatype; +import java.util.function.Predicate; import com.iab.gpp.encoder.field.FieldKey; // This class is used to handle collection types. @@ -7,6 +8,10 @@ public abstract class AbstractDirtyableBitStringDataType & FieldKey, T extends Dirtyable> extends AbstractEncodableBitStringDataType { + protected AbstractDirtyableBitStringDataType(String name, Predicate validator) { + super(name, validator); + } + @Override public boolean isDirty(Object[] values, int index) { T value = get(values, index); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java index f2cb63d4..8783843b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java @@ -1,11 +1,16 @@ package com.iab.gpp.encoder.datatype; +import java.util.function.Predicate; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; public abstract class AbstractEncodableBitStringDataType & FieldKey, T> extends DataType { + protected AbstractEncodableBitStringDataType(String name, Predicate validator) { + super(name, validator); + } + @Override public final void encode(BitString writer, Object[] values, int index, EncodableSegment segment) { encode(writer, get(values, index), segment); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java index ccd4f871..a01d1385 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java @@ -10,7 +10,17 @@ public abstract class DataType & FieldKey, T> { - protected Predicate validator = null; + private final String name; + private final Predicate validator; + + protected DataType(String name, Predicate validator) { + this.name = name; + this.validator = validator; + } + + public final String getName() { + return name; + } protected final void validate(T v) { if (validator == null || validator.test(v)) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java index abd43f94..cdeed31b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java @@ -13,7 +13,8 @@ public final class EncodableArrayOfFixedIntegerRanges & FieldK private final int keyBitStringLength; private final int typeBitStringLength; - public EncodableArrayOfFixedIntegerRanges(int keyBitStringLength, int typeBitStringLength, boolean hardFailIfMissing) { + public EncodableArrayOfFixedIntegerRanges(String name, int keyBitStringLength, int typeBitStringLength) { + super(name, null); this.keyBitStringLength = keyBitStringLength; this.typeBitStringLength = typeBitStringLength; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java index 5e019b1e..7ab87584 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java @@ -10,7 +10,8 @@ public final class EncodableBoolean & FieldKey> extends Abstra private final Boolean initial; - public EncodableBoolean(Boolean initial) { + public EncodableBoolean(String name, Boolean initial) { + super(name, null); this.initial = initial; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java index 2b1e143a..dbb829a0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java @@ -10,6 +10,10 @@ public final class EncodableDatetime & FieldKey> extends AbstractEncodableBitStringDataType { + public EncodableDatetime(String name) { + super(name, null); + } + @Override protected Instant initialize() { return Instant.EPOCH; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java index c0677d9a..6afe0abd 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java @@ -10,7 +10,8 @@ public final class EncodableFibonacciInteger & FieldKey> exten private final Integer initial; - public EncodableFibonacciInteger(Integer initial) { + public EncodableFibonacciInteger(String name, Integer initial) { + super(name, null); this.initial = initial; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java index f56780ad..a1401944 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java @@ -10,6 +10,10 @@ public final class EncodableFibonacciIntegerRange & FieldKey> extends AbstractDirtyableBitStringDataType { + public EncodableFibonacciIntegerRange(String name) { + super(name, null); + } + @Override public IntegerSet initialize() { return new IntegerSet(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java index 862c5478..dd524d41 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java @@ -12,7 +12,8 @@ public final class EncodableFixedBitfield & FieldKey> extends private final int numElements; - public EncodableFixedBitfield(int numElements) { + public EncodableFixedBitfield(String name, int numElements) { + super(name, null); this.numElements = numElements; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java index 6d075cd5..c628147e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java @@ -12,14 +12,14 @@ public final class EncodableFixedInteger & FieldKey> extends A private final int bitStringLength; private final Integer initial; - public EncodableFixedInteger(int bitStringLength, Integer initial, Predicate validator) { + public EncodableFixedInteger(String name, int bitStringLength, Integer initial, Predicate validator) { + super(name, validator); this.bitStringLength = bitStringLength; this.initial = initial; - this.validator = validator; } - public EncodableFixedInteger(int bitStringLength, Integer initial) { - this(bitStringLength, initial, null); + public EncodableFixedInteger(String name, int bitStringLength, Integer initial) { + this(name, bitStringLength, initial, null); } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java index cb840d81..df5fbc70 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java @@ -14,10 +14,10 @@ public final class EncodableFixedIntegerList & FieldKey> exten private final int elementBitStringLength; private final int numElements; - public EncodableFixedIntegerList(int elementBitStringLength, int numElements, Predicate validator) { + public EncodableFixedIntegerList(String name, int elementBitStringLength, int numElements, Predicate validator) { + super(name, validator); this.elementBitStringLength = elementBitStringLength; this.numElements = numElements; - this.validator = validator; } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java index 5875f827..f50abad4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java @@ -10,6 +10,10 @@ public final class EncodableFixedIntegerRange & FieldKey> extends AbstractDirtyableBitStringDataType { + public EncodableFixedIntegerRange(String name) { + super(name, null); + } + @Override protected IntegerSet initialize() { return new IntegerSet(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java index 38d2d4bb..60d1472b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java @@ -12,7 +12,8 @@ public final class EncodableFixedString & FieldKey> extends Ab private final int stringLength; private final String initial; - public EncodableFixedString(int stringLength, String initial) { + public EncodableFixedString(String name, int stringLength, String initial) { + super(name, null); this.stringLength = stringLength; this.initial = initial; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java index d6a48a11..aae841a2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java @@ -13,7 +13,8 @@ public final class EncodableFlexibleBitfield & FieldKey> exten private final SegmentValueProvider getLengthSupplier; - public EncodableFlexibleBitfield(E key) { + public EncodableFlexibleBitfield(String name, E key) { + super(name, null); this.getLengthSupplier = new SegmentValueProvider<>(key); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java index 8ef5dd8c..f41dd0b1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java @@ -11,6 +11,10 @@ public final class EncodableOptimizedFixedRange & FieldKey> extends AbstractDirtyableBitStringDataType { + public EncodableOptimizedFixedRange(String name) { + super(name, null); + } + @Override protected IntegerSet initialize() { return new IntegerSet(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java index 791bd05a..d506ba2f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java @@ -8,7 +8,8 @@ public final class UnencodableBoolean & FieldKey> extends Abst private final Boolean initial; - public UnencodableBoolean(Boolean initial) { + public UnencodableBoolean(String name, Boolean initial) { + super(name, null); this.initial = initial; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableCharacter.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableCharacter.java index 04eb4a3a..13dbb8ca 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableCharacter.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableCharacter.java @@ -7,9 +7,9 @@ public final class UnencodableCharacter & FieldKey> extends Da private final Character initial; - public UnencodableCharacter(Character initial, Predicate validator) { + public UnencodableCharacter(String name, Character initial, Predicate validator) { + super(name, validator); this.initial = initial; - this.validator = validator; } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableInteger.java index a6d5f1b8..efb65924 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableInteger.java @@ -6,7 +6,8 @@ public final class UnencodableInteger & FieldKey> extends Data private final Integer initial; - public UnencodableInteger(Integer initial) { + public UnencodableInteger(String name, Integer initial) { + super(name, null); this.initial = initial; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java index db5a626a..10b750da 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java @@ -5,7 +5,6 @@ import com.iab.gpp.encoder.datatype.FixedIntegerList; public interface FieldKey { - String getName(); DataType getType(); public static final Predicate nullableBooleanAsTwoBitIntegerValidator = (n -> n >= 0 && n <= 2); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java index 3b338e0b..e4bd68d6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java @@ -5,14 +5,12 @@ public final class FieldNames & FieldKey> { - private final E[] keys; private final LinkedHashMap map; private final Integer[] indices; private final Object[] types; @SafeVarargs FieldNames(E... keys) { - this.keys = keys; this.map = new LinkedHashMap<>(); this.indices = new Integer[keys[0].getClass().getEnumConstants().length]; this.types = new Object[keys.length]; @@ -25,15 +23,11 @@ public final class FieldNames & FieldKey> { } public int size() { - return keys.length; + return types.length; } - - public E get(int i) { - return keys[i]; - } - + @SuppressWarnings("unchecked") - public DataType getType(int i) { + public DataType get(int i) { return (DataType) types[i]; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java index 2ce3cf26..957263c5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java @@ -6,23 +6,16 @@ import com.iab.gpp.encoder.section.HeaderV1; public enum HeaderV1Field implements FieldKey { - ID("Id", new EncodableFixedInteger<>(6, HeaderV1.ID)), - VERSION("Version", new EncodableFixedInteger<>(6, HeaderV1.VERSION)), - SECTION_IDS("SectionIds", new EncodableFibonacciIntegerRange<>()); + ID(new EncodableFixedInteger<>("Id", 6, HeaderV1.ID)), + VERSION(new EncodableFixedInteger<>("Version", 6, HeaderV1.VERSION)), + SECTION_IDS(new EncodableFibonacciIntegerRange<>("SectionIds")); - private final String name; private final DataType type; - HeaderV1Field(String name, DataType type) { - this.name = name; + HeaderV1Field(DataType type) { this.type = type; } - @Override - public String getName() { - return name; - } - @Override public DataType getType() { return type; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java index 8d8c19e1..7df97035 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java @@ -12,46 +12,39 @@ import com.iab.gpp.encoder.section.TcfCaV1; public enum TcfCaV1Field implements FieldKey { - VERSION("Version", new EncodableFixedInteger<>(6, TcfCaV1.VERSION)), - CREATED("Created", new EncodableDatetime<>()), - LAST_UPDATED("LastUpdated", new EncodableDatetime<>()), - CMP_ID("CmpId", new EncodableFixedInteger<>(12, 0)), - CMP_VERSION("CmpVersion", new EncodableFixedInteger<>(12, 0)), - CONSENT_SCREEN("ConsentScreen", new EncodableFixedInteger<>(6, 0)), - CONSENT_LANGUAGE("ConsentLanguage", new EncodableFixedString<>(2, "EN")), - VENDOR_LIST_VERSION("VendorListVersion", new EncodableFixedInteger<>(12, 0)), - TCF_POLICY_VERSION("TcfPolicyVersion", new EncodableFixedInteger<>(6, 2)), - USE_NON_STANDARD_STACKS("UseNonStandardStacks", new EncodableBoolean<>(false)), - SPECIAL_FEATURE_EXPRESS_CONSENT("SpecialFeatureExpressConsent", new EncodableFixedBitfield<>(12)), - PURPOSES_EXPRESS_CONSENT("PurposesExpressConsent", new EncodableFixedBitfield<>(24)), - PURPOSES_IMPLIED_CONSENT("PurposesImpliedConsent", new EncodableFixedBitfield<>(24)), - VENDOR_EXPRESS_CONSENT("VendorExpressConsent", new EncodableOptimizedFixedRange<>()), - VENDOR_IMPLIED_CONSENT("VendorImpliedConsent", new EncodableOptimizedFixedRange<>()), - PUB_RESTRICTIONS("PubRestrictions", new EncodableArrayOfFixedIntegerRanges<>(6, 2, false)), + VERSION(new EncodableFixedInteger<>("Version", 6, TcfCaV1.VERSION)), + CREATED(new EncodableDatetime<>("Created")), + LAST_UPDATED(new EncodableDatetime<>("LastUpdated")), + CMP_ID(new EncodableFixedInteger<>("CmpId", 12, 0)), + CMP_VERSION(new EncodableFixedInteger<>("CmpVersion", 12, 0)), + CONSENT_SCREEN(new EncodableFixedInteger<>("ConsentScreen", 6, 0)), + CONSENT_LANGUAGE(new EncodableFixedString<>("ConsentLanguage", 2, "EN")), + VENDOR_LIST_VERSION(new EncodableFixedInteger<>("VendorListVersion", 12, 0)), + TCF_POLICY_VERSION(new EncodableFixedInteger<>("TcfPolicyVersion", 6, 2)), + USE_NON_STANDARD_STACKS(new EncodableBoolean<>("UseNonStandardStacks", false)), + SPECIAL_FEATURE_EXPRESS_CONSENT(new EncodableFixedBitfield<>("SpecialFeatureExpressConsent", 12)), + PURPOSES_EXPRESS_CONSENT(new EncodableFixedBitfield<>("PurposesExpressConsent", 24)), + PURPOSES_IMPLIED_CONSENT(new EncodableFixedBitfield<>("PurposesImpliedConsent", 24)), + VENDOR_EXPRESS_CONSENT(new EncodableOptimizedFixedRange<>("VendorExpressConsent")), + VENDOR_IMPLIED_CONSENT(new EncodableOptimizedFixedRange<>("VendorImpliedConsent")), + PUB_RESTRICTIONS(new EncodableArrayOfFixedIntegerRanges<>("PubRestrictions", 6, 2)), - PUB_PURPOSES_SEGMENT_TYPE("PubPurposesSegmentType", new EncodableFixedInteger<>(3, 3)), - PUB_PURPOSES_EXPRESS_CONSENT("PubPurposesExpressConsent", new EncodableFixedBitfield<>(24)), - PUB_PURPOSES_IMPLIED_CONSENT("PubPurposesImpliedConsent", new EncodableFixedBitfield<>(24)), - NUM_CUSTOM_PURPOSES("NumCustomPurposes", new EncodableFixedInteger<>(6, 0)), - CUSTOM_PURPOSES_EXPRESS_CONSENT("CustomPurposesExpressConsent", new EncodableFlexibleBitfield<>(TcfCaV1Field.NUM_CUSTOM_PURPOSES)), - CUSTOM_PURPOSES_IMPLIED_CONSENT("CustomPurposesImpliedConsent", new EncodableFlexibleBitfield<>(TcfCaV1Field.NUM_CUSTOM_PURPOSES)), + PUB_PURPOSES_SEGMENT_TYPE(new EncodableFixedInteger<>("PubPurposesSegmentType", 3, 3)), + PUB_PURPOSES_EXPRESS_CONSENT(new EncodableFixedBitfield<>("PubPurposesExpressConsent", 24)), + PUB_PURPOSES_IMPLIED_CONSENT(new EncodableFixedBitfield<>("PubPurposesImpliedConsent", 24)), + NUM_CUSTOM_PURPOSES(new EncodableFixedInteger<>("NumCustomPurposes", 6, 0)), + CUSTOM_PURPOSES_EXPRESS_CONSENT(new EncodableFlexibleBitfield<>("CustomPurposesExpressConsent", TcfCaV1Field.NUM_CUSTOM_PURPOSES)), + CUSTOM_PURPOSES_IMPLIED_CONSENT(new EncodableFlexibleBitfield<>("CustomPurposesImpliedConsent", TcfCaV1Field.NUM_CUSTOM_PURPOSES)), - DISCLOSED_VENDORS_SEGMENT_TYPE("DisclosedVendorsSegmentType", new EncodableFixedInteger<>(3, 1)), - DISCLOSED_VENDORS("DisclosedVendors", new EncodableOptimizedFixedRange<>()); + DISCLOSED_VENDORS_SEGMENT_TYPE(new EncodableFixedInteger<>("DisclosedVendorsSegmentType", 3, 1)), + DISCLOSED_VENDORS(new EncodableOptimizedFixedRange<>("DisclosedVendors")); - private final String name; private final DataType type; - TcfCaV1Field(String name, DataType type) { - this.name = name; + TcfCaV1Field(DataType type) { this.type = type; } - @Override - public String getName() { - return name; - } - @Override public DataType getType() { return type; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java index 796a23ea..8a1ebddf 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java @@ -12,49 +12,42 @@ import com.iab.gpp.encoder.section.TcfEuV2; public enum TcfEuV2Field implements FieldKey { - VERSION("Version", new EncodableFixedInteger<>(6, TcfEuV2.VERSION)), - CREATED("Created", new EncodableDatetime<>()), - LAST_UPDATED("LastUpdated", new EncodableDatetime<>()), - CMP_ID("CmpId", new EncodableFixedInteger<>(12, 0)), - CMP_VERSION("CmpVersion", new EncodableFixedInteger<>(12, 0)), - CONSENT_SCREEN("ConsentScreen", new EncodableFixedInteger<>(6, 0)), - CONSENT_LANGUAGE("ConsentLanguage", new EncodableFixedString<>(2, "EN")), - VENDOR_LIST_VERSION("VendorListVersion", new EncodableFixedInteger<>(12, 0)), - POLICY_VERSION("PolicyVersion", new EncodableFixedInteger<>(6, 2)), - IS_SERVICE_SPECIFIC("IsServiceSpecific", new EncodableBoolean<>(false)), - USE_NON_STANDARD_STACKS("UseNonStandardStacks", new EncodableBoolean<>(false)), - SPECIAL_FEATURE_OPTINS("SpecialFeatureOptins", new EncodableFixedBitfield<>(12)), - PURPOSE_CONSENTS("PurposeConsents", new EncodableFixedBitfield<>(24)), - PURPOSE_LEGITIMATE_INTERESTS("PurposeLegitimateInterests", new EncodableFixedBitfield<>(24)), - PURPOSE_ONE_TREATMENT("PurposeOneTreatment", new EncodableBoolean<>(false)), - PUBLISHER_COUNTRY_CODE("PublisherCountryCode", new EncodableFixedString<>(2, "AA")), - VENDOR_CONSENTS("VendorConsents", new EncodableOptimizedFixedRange<>()), - VENDOR_LEGITIMATE_INTERESTS("VendorLegitimateInterests", new EncodableOptimizedFixedRange<>()), - PUBLISHER_RESTRICTIONS("PublisherRestrictions", new EncodableArrayOfFixedIntegerRanges<>(6, 2, false)), - PUBLISHER_PURPOSES_SEGMENT_TYPE("PublisherPurposesSegmentType", new EncodableFixedInteger<>(3, 3)), - PUBLISHER_CONSENTS("PublisherConsents", new EncodableFixedBitfield<>(24)), - PUBLISHER_LEGITIMATE_INTERESTS("PublisherLegitimateInterests", new EncodableFixedBitfield<>(24)), - NUM_CUSTOM_PURPOSES("NumCustomPurposes", new EncodableFixedInteger<>(6, 0)), - PUBLISHER_CUSTOM_CONSENTS("PublisherCustomConsents", new EncodableFlexibleBitfield<>(TcfEuV2Field.NUM_CUSTOM_PURPOSES)), - PUBLISHER_CUSTOM_LEGITIMATE_INTERESTS("PublisherCustomLegitimateInterests", new EncodableFlexibleBitfield<>(TcfEuV2Field.NUM_CUSTOM_PURPOSES)), - VENDORS_ALLOWED_SEGMENT_TYPE("VendorsAllowedSegmentType", new EncodableFixedInteger<>(3, 2)), - VENDORS_ALLOWED("VendorsAllowed", new EncodableOptimizedFixedRange<>()), - VENDORS_DISCLOSED_SEGMENT_TYPE("VendorsDisclosedSegmentType", new EncodableFixedInteger<>(3, 1)), - VENDORS_DISCLOSED("VendorsDisclosed", new EncodableOptimizedFixedRange<>()); + VERSION(new EncodableFixedInteger<>("Version", 6, TcfEuV2.VERSION)), + CREATED(new EncodableDatetime<>("Created")), + LAST_UPDATED(new EncodableDatetime<>("LastUpdated")), + CMP_ID(new EncodableFixedInteger<>("CmpId", 12, 0)), + CMP_VERSION(new EncodableFixedInteger<>("CmpVersion", 12, 0)), + CONSENT_SCREEN(new EncodableFixedInteger<>("ConsentScreen", 6, 0)), + CONSENT_LANGUAGE(new EncodableFixedString<>("ConsentLanguage", 2, "EN")), + VENDOR_LIST_VERSION(new EncodableFixedInteger<>("VendorListVersion", 12, 0)), + POLICY_VERSION(new EncodableFixedInteger<>("PolicyVersion", 6, 2)), + IS_SERVICE_SPECIFIC(new EncodableBoolean<>("IsServiceSpecific", false)), + USE_NON_STANDARD_STACKS(new EncodableBoolean<>("UseNonStandardStacks", false)), + SPECIAL_FEATURE_OPTINS(new EncodableFixedBitfield<>("SpecialFeatureOptins", 12)), + PURPOSE_CONSENTS(new EncodableFixedBitfield<>("PurposeConsents", 24)), + PURPOSE_LEGITIMATE_INTERESTS(new EncodableFixedBitfield<>("PurposeLegitimateInterests", 24)), + PURPOSE_ONE_TREATMENT(new EncodableBoolean<>("PurposeOneTreatment", false)), + PUBLISHER_COUNTRY_CODE(new EncodableFixedString<>("PublisherCountryCode", 2, "AA")), + VENDOR_CONSENTS(new EncodableOptimizedFixedRange<>("VendorConsents")), + VENDOR_LEGITIMATE_INTERESTS(new EncodableOptimizedFixedRange<>("VendorLegitimateInterests")), + PUBLISHER_RESTRICTIONS(new EncodableArrayOfFixedIntegerRanges<>("PublisherRestrictions", 6, 2)), + PUBLISHER_PURPOSES_SEGMENT_TYPE(new EncodableFixedInteger<>("PublisherPurposesSegmentType", 3, 3)), + PUBLISHER_CONSENTS(new EncodableFixedBitfield<>("PublisherConsents", 24)), + PUBLISHER_LEGITIMATE_INTERESTS(new EncodableFixedBitfield<>("PublisherLegitimateInterests", 24)), + NUM_CUSTOM_PURPOSES(new EncodableFixedInteger<>("NumCustomPurposes", 6, 0)), + PUBLISHER_CUSTOM_CONSENTS(new EncodableFlexibleBitfield<>("PublisherCustomConsents", TcfEuV2Field.NUM_CUSTOM_PURPOSES)), + PUBLISHER_CUSTOM_LEGITIMATE_INTERESTS(new EncodableFlexibleBitfield<>("PublisherCustomLegitimateInterests", TcfEuV2Field.NUM_CUSTOM_PURPOSES)), + VENDORS_ALLOWED_SEGMENT_TYPE(new EncodableFixedInteger<>("VendorsAllowedSegmentType", 3, 2)), + VENDORS_ALLOWED(new EncodableOptimizedFixedRange<>("VendorsAllowed")), + VENDORS_DISCLOSED_SEGMENT_TYPE(new EncodableFixedInteger<>("VendorsDisclosedSegmentType", 3, 1)), + VENDORS_DISCLOSED(new EncodableOptimizedFixedRange<>("VendorsDisclosed")); - private final String name; private final DataType type; - TcfEuV2Field(String name, DataType type) { - this.name = name; + TcfEuV2Field(DataType type) { this.type = type; } - @Override - public String getName() { - return name; - } - @Override public DataType getType() { return type; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java index 3c2329e0..7cb4bb22 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java @@ -8,46 +8,39 @@ import com.iab.gpp.encoder.section.UsCa; public enum UsCaField implements FieldKey { - VERSION("Version", new EncodableFixedInteger<>(6, UsCa.VERSION)), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SHARING_OPT_OUT_NOTICE("SharingOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SENSITIVE_DATA_LIMIT_USE_NOTICE("SensitiveDataLimitUseNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SHARING_OPT_OUT("SharingOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList<>(2, 9, nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList<>(2, 2, nullableBooleanAsTwoBitIntegerListValidator)), - PERSONAL_DATA_CONSENTS("PersonalDataConsents", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), + VERSION(new EncodableFixedInteger<>("Version", 6, UsCa.VERSION)), + SALE_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SHARING_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("SharingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_LIMIT_USE_NOTICE( + new EncodableFixedInteger<>("SensitiveDataLimitUseNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT( + new EncodableFixedInteger<>("SaleOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SHARING_OPT_OUT( + new EncodableFixedInteger<>("SharingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING( + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 9, nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 2, nullableBooleanAsTwoBitIntegerListValidator)), + PERSONAL_DATA_CONSENTS( + new EncodableFixedInteger<>("PersonalDataConsents",2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION( + new EncodableFixedInteger<>("MspaCoveredTransaction",2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE( + new EncodableFixedInteger<>("MspaOptOutOptionMode",2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE( + new EncodableFixedInteger<>("MspaServiceProviderMode",2, 0, nullableBooleanAsTwoBitIntegerValidator)), - GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger<>(2, 1)), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean<>(true)), - GPC("Gpc", new EncodableBoolean<>(false)); + GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), + GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), + GPC(new EncodableBoolean<>("Gpc", false)); - private final String name; private final DataType type; - UsCaField(String name, DataType type) { - this.name = name; + UsCaField(DataType type) { this.type = type; } - @Override - public String getName() { - return name; - } - @Override public DataType getType() { return type; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java index e04cdb4c..84b431ec 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java @@ -8,44 +8,37 @@ import com.iab.gpp.encoder.section.UsCo; public enum UsCoField implements FieldKey { - VERSION("Version", new EncodableFixedInteger<>(6, UsCo.VERSION)), - SHARING_NOTICE("SharingNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", new EncodableFixedIntegerList<>(2, 7, nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), + VERSION(new EncodableFixedInteger<>("Version", 6, UsCo.VERSION)), + SHARING_NOTICE( + new EncodableFixedInteger<>("SharingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT( + new EncodableFixedInteger<>("SaleOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT( + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING(new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 7, nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS( + new EncodableFixedInteger<>("KnownChildSensitiveDataConsents", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION( + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE( + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE( + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), - GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger<>(2, 1)), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean<>(true)), - GPC("Gpc", new EncodableBoolean<>(false)); + GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), + GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), + GPC(new EncodableBoolean<>("Gpc", false)); - private final String name; private final DataType type; - UsCoField(String name, DataType type) { - this.name = name; + UsCoField(DataType type) { this.type = type; } - @Override - public String getName() { - return name; - } - @Override public DataType getType() { return type; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java index 58990ea5..5aa4d8fa 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java @@ -8,44 +8,37 @@ import com.iab.gpp.encoder.section.UsCt; public enum UsCtField implements FieldKey { - VERSION("Version", new EncodableFixedInteger<>(6, UsCt.VERSION)), - SHARING_NOTICE("SharingNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList<>(2, 8, nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList<>(2, 3, nullableBooleanAsTwoBitIntegerListValidator)), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), + VERSION(new EncodableFixedInteger<>("Version", 6, UsCt.VERSION)), + SHARING_NOTICE( + new EncodableFixedInteger<>("SharingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice",2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT( + new EncodableFixedInteger<>("SaleOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT( + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING( + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, nullableBooleanAsTwoBitIntegerListValidator)), + MSPA_COVERED_TRANSACTION( + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE( + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE( + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), - GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger<>(2, 1)), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean<>(true)), - GPC("Gpc", new EncodableBoolean<>(false)); + GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), + GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), + GPC(new EncodableBoolean<>("Gpc", false)); - private final String name; private final DataType type; - UsCtField(String name, DataType type) { - this.name = name; + UsCtField(DataType type) { this.type = type; } - @Override - public String getName() { - return name; - } - @Override public DataType getType() { return type; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java index 3c768a13..ad7a0a7e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java @@ -8,47 +8,40 @@ import com.iab.gpp.encoder.section.UsDe; public enum UsDeField implements FieldKey { - VERSION("Version", new EncodableFixedInteger<>(6, UsDe.VERSION)), - PROCESSING_NOTICE("ProcessingNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList<>(2, 9, nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", - new EncodableFixedIntegerList<>(2, 5, nullableBooleanAsTwoBitIntegerListValidator)), - ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), + VERSION(new EncodableFixedInteger<>("Version", 6, UsDe.VERSION)), + PROCESSING_NOTICE( + new EncodableFixedInteger<>("ProcessingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT( + new EncodableFixedInteger<>("SaleOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT( + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING( + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 9, nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS( + new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 5, nullableBooleanAsTwoBitIntegerListValidator)), + ADDITIONAL_DATA_PROCESSING_CONSENT( + new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION( + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE( + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE( + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), - GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger<>(2, 1)), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean<>(true)), - GPC("Gpc", new EncodableBoolean<>(false)); + GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), + GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), + GPC(new EncodableBoolean<>("Gpc", false)); - private final String name; private final DataType type; - UsDeField(String name, DataType type) { - this.name = name; + UsDeField(DataType type) { this.type = type; } - @Override - public String getName() { - return name; - } - @Override public DataType getType() { return type; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java index 94c26276..3962017d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java @@ -6,42 +6,35 @@ import com.iab.gpp.encoder.section.UsFl; public enum UsFlField implements FieldKey { - VERSION("Version", new EncodableFixedInteger<>(6, UsFl.VERSION)), - PROCESSING_NOTICE("ProcessingNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList<>(2, 8, nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList<>(2, 3, nullableBooleanAsTwoBitIntegerListValidator)), - ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)); + VERSION(new EncodableFixedInteger<>("Version", 6, UsFl.VERSION)), + PROCESSING_NOTICE( + new EncodableFixedInteger<>("ProcessingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT( + new EncodableFixedInteger<>("SaleOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT( + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING( + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, nullableBooleanAsTwoBitIntegerListValidator)), + ADDITIONAL_DATA_PROCESSING_CONSENT( + new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION( + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE( + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE( + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)); - private final String name; private final DataType type; - UsFlField(String name, DataType type) { - this.name = name; + UsFlField(DataType type) { this.type = type; } - @Override - public String getName() { - return name; - } - @Override public DataType getType() { return type; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java index f15b6157..f002508e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java @@ -8,47 +8,40 @@ import com.iab.gpp.encoder.section.UsIa; public enum UsIaField implements FieldKey { - VERSION("Version", new EncodableFixedInteger<>(6, UsIa.VERSION)), - PROCESSING_NOTICE("ProcessingNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SENSITIVE_DATA_OPT_OUT_NOTICE("SensitiveDataOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList<>(2, 8, nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), + VERSION(new EncodableFixedInteger<>("Version", 6, UsIa.VERSION)), + PROCESSING_NOTICE( + new EncodableFixedInteger<>("ProcessingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("SensitiveDataOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT( + new EncodableFixedInteger<>("SaleOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT( + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING( + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS( + new EncodableFixedInteger<>("KnownChildSensitiveDataConsents", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION( + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE( + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE( + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), - GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger<>(2, 1)), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean<>(true)), - GPC("Gpc", new EncodableBoolean<>(false)); + GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), + GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), + GPC(new EncodableBoolean<>("Gpc", false)); - private final String name; private final DataType type; - UsIaField(String name, DataType type) { - this.name = name; + UsIaField(DataType type) { this.type = type; } - @Override - public String getName() { - return name; - } - @Override public DataType getType() { return type; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java index 012fb72d..43e39200 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java @@ -8,46 +8,39 @@ import com.iab.gpp.encoder.section.UsMt; public enum UsMtField implements FieldKey { - VERSION("Version", new EncodableFixedInteger<>(6, UsMt.VERSION)), - SHARING_NOTICE("SharingNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList<>(2, 8, nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList<>(2, 3, nullableBooleanAsTwoBitIntegerListValidator)), - ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), + VERSION(new EncodableFixedInteger<>("Version", 6, UsMt.VERSION)), + SHARING_NOTICE( + new EncodableFixedInteger<>("SharingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT( + new EncodableFixedInteger<>("SaleOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT( + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING( + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, nullableBooleanAsTwoBitIntegerListValidator)), + ADDITIONAL_DATA_PROCESSING_CONSENT( + new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION( + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE( + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE( + new EncodableFixedInteger<>("MspaServiceProviderMode",2, 0, nullableBooleanAsTwoBitIntegerValidator)), - GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger<>(2, 1)), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean<>(true)), - GPC("Gpc", new EncodableBoolean<>(false)); + GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), + GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), + GPC(new EncodableBoolean<>("Gpc", false)); - private final String name; private final DataType type; - UsMtField(String name, DataType type) { - this.name = name; + UsMtField(DataType type) { this.type = type; } - @Override - public String getName() { - return name; - } - @Override public DataType getType() { return type; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java index 7bffab80..791f5c92 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java @@ -8,54 +8,47 @@ import com.iab.gpp.encoder.section.UsNat; public enum UsNatField implements FieldKey { - VERSION("Version", new EncodableFixedInteger<>(6, UsNat.VERSION)), - SHARING_NOTICE("SharingNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SHARING_OPT_OUT_NOTICE("SharingOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE("SensitiveDataProcessingOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SENSITIVE_DATA_LIMIT_USE_NOTICE("SensitiveDataLimitUseNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SHARING_OPT_OUT("SharingOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList<>(2, 16, nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList<>(2, 3, nullableBooleanAsTwoBitIntegerListValidator)), - PERSONAL_DATA_CONSENTS("PersonalDataConsents", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), + VERSION(new EncodableFixedInteger<>("Version", 6, UsNat.VERSION)), + SHARING_NOTICE( + new EncodableFixedInteger<>("SharingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SHARING_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("SharingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("SensitiveDataProcessingOptOutNotice",2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_LIMIT_USE_NOTICE( + new EncodableFixedInteger<>("SensitiveDataLimitUseNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT( + new EncodableFixedInteger<>("SaleOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SHARING_OPT_OUT( + new EncodableFixedInteger<>("SharingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT( + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING( + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 16, nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, nullableBooleanAsTwoBitIntegerListValidator)), + PERSONAL_DATA_CONSENTS( + new EncodableFixedInteger<>("PersonalDataConsents", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION( + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE( + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE( + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), - GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger<>(2, 1)), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean<>(true)), - GPC("Gpc", new EncodableBoolean<>(false)); + GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), + GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), + GPC(new EncodableBoolean<>("Gpc", false)); - private final String name; private final DataType type; - UsNatField(String name, DataType type) { - this.name = name; + UsNatField(DataType type) { this.type = type; } - @Override - public String getName() { - return name; - } - @Override public DataType getType() { return type; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java index 750bffae..efa39c8b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java @@ -8,47 +8,40 @@ import com.iab.gpp.encoder.section.UsNe; public enum UsNeField implements FieldKey { - VERSION("Version", new EncodableFixedInteger<>(6, UsNe.VERSION)), - PROCESSING_NOTICE("ProcessingNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList<>(2, 8, nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), + VERSION(new EncodableFixedInteger<>("Version", 6, UsNe.VERSION)), + PROCESSING_NOTICE( + new EncodableFixedInteger<>("ProcessingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT( + new EncodableFixedInteger<>("SaleOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT( + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING( + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS( + new EncodableFixedInteger<>("KnownChildSensitiveDataConsents", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + ADDITIONAL_DATA_PROCESSING_CONSENT( + new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION( + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE( + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE( + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), - GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger<>(2, 1)), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean<>(true)), - GPC("Gpc", new EncodableBoolean<>(false)); + GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), + GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), + GPC(new EncodableBoolean<>("Gpc", false)); - private final String name; private final DataType type; - UsNeField(String name, DataType type) { - this.name = name; + UsNeField(DataType type) { this.type = type; } - @Override - public String getName() { - return name; - } - @Override public DataType getType() { return type; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java index 26a5b198..3808b71d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java @@ -8,46 +8,39 @@ import com.iab.gpp.encoder.section.UsNh; public enum UsNhField implements FieldKey { - VERSION("Version", new EncodableFixedInteger<>(6, UsNh.VERSION)), - PROCESSING_NOTICE("ProcessingNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList<>(2, 8, nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList<>(2, 3, nullableBooleanAsTwoBitIntegerListValidator)), - ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), + VERSION(new EncodableFixedInteger<>("Version", 6, UsNh.VERSION)), + PROCESSING_NOTICE( + new EncodableFixedInteger<>("ProcessingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT( + new EncodableFixedInteger<>("SaleOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT( + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING( + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, nullableBooleanAsTwoBitIntegerListValidator)), + ADDITIONAL_DATA_PROCESSING_CONSENT( + new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION( + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE( + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE( + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), - GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger<>(2, 1)), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean<>(true)), - GPC("Gpc", new EncodableBoolean<>(false)); + GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), + GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), + GPC(new EncodableBoolean<>("Gpc", false)); - private final String name; private final DataType type; - UsNhField(String name, DataType type) { - this.name = name; + UsNhField(DataType type) { this.type = type; } - @Override - public String getName() { - return name; - } - @Override public DataType getType() { return type; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java index 24e94a2d..e0a5af8d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java @@ -8,46 +8,39 @@ import com.iab.gpp.encoder.section.UsNj; public enum UsNjField implements FieldKey { - VERSION("Version", new EncodableFixedInteger<>(6, UsNj.VERSION)), - PROCESSING_NOTICE("ProcessingNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList<>(2, 10, nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList<>(2, 5, nullableBooleanAsTwoBitIntegerListValidator)), - ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), + VERSION(new EncodableFixedInteger<>("Version", 6, UsNj.VERSION)), + PROCESSING_NOTICE( + new EncodableFixedInteger<>("ProcessingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice",2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT( + new EncodableFixedInteger<>("SaleOptOut",2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT( + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING( + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 10, nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 5, nullableBooleanAsTwoBitIntegerListValidator)), + ADDITIONAL_DATA_PROCESSING_CONSENT( + new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION( + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE( + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE( + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), - GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger<>(2, 1)), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean<>(true)), - GPC("Gpc", new EncodableBoolean<>(false)); + GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), + GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), + GPC(new EncodableBoolean<>("Gpc", false)); - private final String name; private final DataType type; - UsNjField(String name, DataType type) { - this.name = name; + UsNjField(DataType type) { this.type = type; } - @Override - public String getName() { - return name; - } - @Override public DataType getType() { return type; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java index 16df94f9..f9cb55a9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java @@ -8,46 +8,39 @@ import com.iab.gpp.encoder.section.UsOr; public enum UsOrField implements FieldKey { - VERSION("Version", new EncodableFixedInteger<>(6, UsOr.VERSION)), - PROCESSING_NOTICE("ProcessingNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList<>(2, 11, nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList<>(2, 3, nullableBooleanAsTwoBitIntegerListValidator)), - ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), + VERSION(new EncodableFixedInteger<>("Version", 6, UsOr.VERSION)), + PROCESSING_NOTICE( + new EncodableFixedInteger<>("ProcessingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT( + new EncodableFixedInteger<>("SaleOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT( + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING( + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 11, nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, nullableBooleanAsTwoBitIntegerListValidator)), + ADDITIONAL_DATA_PROCESSING_CONSENT( + new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION( + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE( + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE( + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), - GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger<>(2, 1)), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean<>(true)), - GPC("Gpc", new EncodableBoolean<>(false)); + GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), + GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), + GPC(new EncodableBoolean<>("Gpc", false)); - private final String name; private final DataType type; - UsOrField(String name, DataType type) { - this.name = name; + UsOrField(DataType type) { this.type = type; } - @Override - public String getName() { - return name; - } - @Override public DataType getType() { return type; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java index 4742a86f..f83e0207 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java @@ -8,47 +8,40 @@ import com.iab.gpp.encoder.section.UsTn; public enum UsTnField implements FieldKey { - VERSION("Version", new EncodableFixedInteger<>(6, UsTn.VERSION)), - PROCESSING_NOTICE("ProcessingNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList<>(2, 8, nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), + VERSION(new EncodableFixedInteger<>("Version", 6, UsTn.VERSION)), + PROCESSING_NOTICE( + new EncodableFixedInteger<>("ProcessingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("SaleOptOutNotice",2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT( + new EncodableFixedInteger<>("SaleOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT( + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING( + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS( + new EncodableFixedInteger<>("KnownChildSensitiveDataConsents", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + ADDITIONAL_DATA_PROCESSING_CONSENT( + new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION( + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE( + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE( + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), - GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger<>(2, 1)), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean<>(true)), - GPC("Gpc", new EncodableBoolean<>(false)); + GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), + GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), + GPC(new EncodableBoolean<>("Gpc", false)); - private final String name; private final DataType type; - UsTnField(String name, DataType type) { - this.name = name; + UsTnField(DataType type) { this.type = type; } - @Override - public String getName() { - return name; - } - @Override public DataType getType() { return type; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java index d571a463..eb16dbeb 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java @@ -8,47 +8,40 @@ import com.iab.gpp.encoder.section.UsTx; public enum UsTxField implements FieldKey { - VERSION("Version", new EncodableFixedInteger<>(6, UsTx.VERSION)), - PROCESSING_NOTICE("ProcessingNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList<>(2, 8, nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), + VERSION(new EncodableFixedInteger<>("Version", 6, UsTx.VERSION)), + PROCESSING_NOTICE( + new EncodableFixedInteger<>("ProcessingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT( + new EncodableFixedInteger<>("SaleOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT( + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING( + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS( + new EncodableFixedInteger<>("KnownChildSensitiveDataConsents", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + ADDITIONAL_DATA_PROCESSING_CONSENT( + new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION( + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE( + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE( + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), - GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger<>(2, 1)), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean<>(true)), - GPC("Gpc", new EncodableBoolean<>(false)); + GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), + GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), + GPC(new EncodableBoolean<>("Gpc", false)); - private final String name; private final DataType type; - UsTxField(String name, DataType type) { - this.name = name; + UsTxField(DataType type) { this.type = type; } - @Override - public String getName() { - return name; - } - @Override public DataType getType() { return type; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java index 101f80ec..47c9ba4c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java @@ -6,43 +6,36 @@ import com.iab.gpp.encoder.section.UsUt; public enum UsUtField implements FieldKey { - VERSION("Version", new EncodableFixedInteger<>(6, UsUt.VERSION)), - SHARING_NOTICE("SharingNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE("SensitiveDataProcessingOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList<>(2, 8, nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)); + VERSION(new EncodableFixedInteger<>("Version", 6, UsUt.VERSION)), + SHARING_NOTICE( + new EncodableFixedInteger<>("SharingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("SensitiveDataProcessingOptOutNotice",2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT( + new EncodableFixedInteger<>("SaleOptOut",2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT( + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING( + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS( + new EncodableFixedInteger<>("KnownChildSensitiveDataConsents", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION( + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE( + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE( + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)); - private final String name; private final DataType type; - UsUtField(String name, DataType type) { - this.name = name; + UsUtField(DataType type) { this.type = type; } - @Override - public String getName() { - return name; - } - @Override public DataType getType() { return type; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java index 626de774..9f013cc2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java @@ -6,41 +6,34 @@ import com.iab.gpp.encoder.section.UsVa; public enum UsVaField implements FieldKey { - VERSION("Version", new EncodableFixedInteger<>(6, UsVa.VERSION)), - SHARING_NOTICE("SharingNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList<>(2, 8, nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)); + VERSION(new EncodableFixedInteger<>("Version", 6, UsVa.VERSION)), + SHARING_NOTICE( + new EncodableFixedInteger<>("SharingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT( + new EncodableFixedInteger<>("SaleOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT( + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING( + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS( + new EncodableFixedInteger<>("KnownChildSensitiveDataConsents", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION( + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE( + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE( + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)); - private final String name; private final DataType type; - UsVaField(String name, DataType type) { - this.name = name; + UsVaField(DataType type) { this.type = type; } - @Override - public String getName() { - return name; - } - @Override public DataType getType() { return type; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java index cacb12c0..42921193 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java @@ -6,24 +6,17 @@ import com.iab.gpp.encoder.section.UspV1; public enum UspV1Field implements FieldKey { - VERSION("Version", new UnencodableInteger<>(UspV1.VERSION)), - NOTICE("Notice", new UnencodableCharacter<>('-', (v -> v == 'Y' || v == 'N' || v == '-'))), - OPT_OUT_SALE("OptOutSale", new UnencodableCharacter<>('-', (v -> v == 'Y' || v == 'N' || v == '-'))), - LSPA_COVERED("LspaCovered", new UnencodableCharacter<>('-', (v -> v == 'Y' || v == 'N' || v == '-'))); + VERSION(new UnencodableInteger<>("Version", UspV1.VERSION)), + NOTICE(new UnencodableCharacter<>("Notice", '-', (v -> v == 'Y' || v == 'N' || v == '-'))), + OPT_OUT_SALE(new UnencodableCharacter<>("OptOutSale", '-', (v -> v == 'Y' || v == 'N' || v == '-'))), + LSPA_COVERED(new UnencodableCharacter<>("LspaCovered", '-', (v -> v == 'Y' || v == 'N' || v == '-'))); - private final String name; private final DataType type; - UspV1Field(String name, DataType type) { - this.name = name; + UspV1Field(DataType type) { this.type = type; } - @Override - public String getName() { - return name; - } - @Override public DataType getType() { return type; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java index 0c5f9e39..28c3cc80 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.DataType; import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.field.FieldNames; @@ -21,12 +20,7 @@ protected final CharSequence doEncode() { BitString bitString = new BitString(); int size = fieldNames.size(); for (int i = 0; i < size; i++) { - DataType field = fieldNames.getType(i); - if (field != null) { - field.encode(bitString, values, i, this); - } else { - throw new EncodingException("Field not found: '" + fieldNames.get(i) + "'"); - } + fieldNames.get(i).encode(bitString, values, i, this); } return getBase64UrlEncoder().encode(bitString); @@ -38,15 +32,11 @@ protected final void doDecode(CharSequence encodedString) { BitString bitString = decodeBitString(encodedString); int size = fieldNames.size(); for (int i = 0; i < size; i++) { - DataType field = fieldNames.getType(i); - if (field != null) { - try { - field.decode(bitString, values, i, this); - } catch (Exception e) { - throw new DecodingException("Unable to decode " + fieldNames.get(i), e); - } - } else { - throw new DecodingException("Field not found: '" + fieldNames.get(i) + "'"); + DataType field = fieldNames.get(i); + try { + field.decode(bitString, values, i, this); + } catch (Exception e) { + throw new DecodingException("Unable to decode " + field, e); } } } catch (Exception e) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java index 324931db..0d2f0a09 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.DataType; import com.iab.gpp.encoder.error.InvalidFieldException; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.field.FieldNames; @@ -21,14 +20,6 @@ public final E resolveKey(FieldKey fieldName) { return fieldNames.resolveKey(fieldName); } - protected final DataType get(E key) { - Integer index = fieldNames.getIndex(key); - if (index != null) { - return fieldNames.getType(index); - } - return null; - } - @Override public final boolean hasField(E key) { return fieldNames.getIndex(key) != null; @@ -41,7 +32,7 @@ public final boolean isDirty() { } int size = fieldNames.size(); for (int i = 0; i < size; i++) { - if (fieldNames.getType(i).isDirty(values, i)) { + if (fieldNames.get(i).isDirty(values, i)) { return true; } } @@ -53,7 +44,7 @@ public final void setDirty(boolean dirty) { this.dirty = dirty; int size = fieldNames.size(); for (int i = 0; i < size; i++) { - fieldNames.getType(i).setDirty(values, i, dirty); + fieldNames.get(i).setDirty(values, i, dirty); } } @@ -67,7 +58,7 @@ public final Object getFieldValue(E fieldName) { protected final Object getFieldValueUnsafe(E fieldName) { Integer index = fieldNames.getIndex(fieldName); if (index != null) { - return fieldNames.getType(index).get(values, index); + return fieldNames.get(index).get(values, index); } else { throw new InvalidFieldException("Invalid field: '" + fieldName + "'"); } @@ -82,7 +73,7 @@ public final void setFieldValue(E fieldName, Object value) { protected final void setFieldValueUnsafe(E fieldName, Object value) { Integer index = fieldNames.getIndex(fieldName); if (index != null) { - fieldNames.getType(index).set(values, index, value); + fieldNames.get(index).set(values, index, value); dirty = true; } else { throw new InvalidFieldException(fieldName + " not found"); @@ -96,8 +87,7 @@ public String toString() { sb.append("{name=").append(getClass().getSimpleName()); int size = fieldNames.size(); for (int i = 0; i < size; i++) { - E field = fieldNames.get(i); - sb.append(", ").append(field.getName()).append('=').append(values[i]); + sb.append(", ").append(fieldNames.get(i).getName()).append('=').append(values[i]); } sb.append('}'); return sb.toString(); diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java index a9c163f2..d64fbae6 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java @@ -13,7 +13,7 @@ public class EncodableFixedIntegerRangeTest { @Test public void testEncode1() throws EncodingException { - EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange<>(); + EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange<>(""); IntegerSet integerSet = new IntegerSet(); integerSet.add(28); BitString builder = new BitString(); @@ -23,7 +23,7 @@ public void testEncode1() throws EncodingException { @Test public void testEncode2() throws EncodingException { - EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange<>(); + EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange<>(""); IntegerSet integerSet = new IntegerSet(); integerSet.add(29); BitString builder = new BitString(); @@ -33,13 +33,13 @@ public void testEncode2() throws EncodingException { @Test public void testDecode1() throws DecodingException { - EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange<>(); + EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange<>(""); Assertions.assertEquals(Set.of(28), encodableFixedIntegerRange.decode(BitString.of("00000000000100000000000011100"), null)); } @Test public void testDecode2() throws DecodingException { - EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange<>(); + EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange<>(""); Assertions.assertEquals(Set.of(29), encodableFixedIntegerRange.decode(BitString.of("00000000000100000000000011101"), null)); } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java index 7f312681..d527d26e 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java @@ -10,7 +10,7 @@ public class EncodableOptimizedFixedRangeTest { - private EncodableOptimizedFixedRange encodableOptimizedFixedRange = new EncodableOptimizedFixedRange<>(); + private EncodableOptimizedFixedRange encodableOptimizedFixedRange = new EncodableOptimizedFixedRange<>(""); @Test public void testEncode1() { diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListEncoderTest.java index db142349..360cd604 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListEncoderTest.java @@ -151,7 +151,7 @@ public void testEncode19() { } private FixedIntegerList decode(String str) { - EncodableFixedIntegerList encodable = new EncodableFixedIntegerList<>(2, 2, null); + EncodableFixedIntegerList encodable = new EncodableFixedIntegerList<>("", 2, 2, null); return encodable.decode(BitString.of(str), null); } From e10dedd192dd4b5b975adfa83b2665cbaf192a06 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 10 Feb 2026 16:55:19 -0500 Subject: [PATCH 72/86] add some tostring --- .../main/java/com/iab/gpp/encoder/datatype/DataType.java | 7 ++++++- .../datatype/EncodableArrayOfFixedIntegerRanges.java | 5 +++++ .../iab/gpp/encoder/datatype/EncodableFixedBitfield.java | 5 +++++ .../iab/gpp/encoder/datatype/EncodableFixedInteger.java | 5 +++++ .../gpp/encoder/datatype/EncodableFixedIntegerList.java | 5 +++++ .../com/iab/gpp/encoder/datatype/EncodableFixedString.java | 5 +++++ .../main/java/com/iab/gpp/encoder/field/FieldNames.java | 4 ++-- 7 files changed, 33 insertions(+), 3 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java index a01d1385..3dee0b27 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java @@ -10,7 +10,7 @@ public abstract class DataType & FieldKey, T> { - private final String name; + protected final String name; private final Predicate validator; protected DataType(String name, Predicate validator) { @@ -22,6 +22,11 @@ public final String getName() { return name; } + @Override + public String toString() { + return name + "=" + this.getClass().getSimpleName(); + } + protected final void validate(T v) { if (validator == null || validator.test(v)) { return; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java index cdeed31b..4fcd35a9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java @@ -19,6 +19,11 @@ public EncodableArrayOfFixedIntegerRanges(String name, int keyBitStringLength, i this.typeBitStringLength = typeBitStringLength; } + @Override + public String toString() { + return name + "=N-ArrayOfRanges(" + keyBitStringLength + "," + typeBitStringLength + ")"; + } + @Override protected DirtyableList initialize() { return new DirtyableList<>(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java index dd524d41..97c0f5c5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java @@ -17,6 +17,11 @@ public EncodableFixedBitfield(String name, int numElements) { this.numElements = numElements; } + @Override + public String toString() { + return name + "=Bitfield(" + numElements + ")"; + } + @Override protected IntegerSet initialize() { return new IntegerSet(numElements); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java index c628147e..f525cbba 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java @@ -21,6 +21,11 @@ public EncodableFixedInteger(String name, int bitStringLength, Integer initial, public EncodableFixedInteger(String name, int bitStringLength, Integer initial) { this(name, bitStringLength, initial, null); } + + @Override + public String toString() { + return name + "=Int(" + bitStringLength + ")"; + } @Override protected Integer initialize() { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java index df5fbc70..a79cdb9f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java @@ -20,6 +20,11 @@ public EncodableFixedIntegerList(String name, int elementBitStringLength, int nu this.numElements = numElements; } + @Override + public String toString() { + return name + "=Int(" + elementBitStringLength + "," + numElements + ")"; + } + @Override protected FixedIntegerList initialize() { return new FixedIntegerList(elementBitStringLength, numElements); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java index 60d1472b..696b65d9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java @@ -17,6 +17,11 @@ public EncodableFixedString(String name, int stringLength, String initial) { this.stringLength = stringLength; this.initial = initial; } + + @Override + public String toString() { + return name + "=String(" + stringLength + ")"; + } @Override protected String initialize() { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java index e4bd68d6..6159bc92 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java @@ -7,13 +7,13 @@ public final class FieldNames & FieldKey> { private final LinkedHashMap map; private final Integer[] indices; - private final Object[] types; + private final DataType[] types; @SafeVarargs FieldNames(E... keys) { this.map = new LinkedHashMap<>(); this.indices = new Integer[keys[0].getClass().getEnumConstants().length]; - this.types = new Object[keys.length]; + this.types = new DataType[keys.length]; for (int i = 0; i < keys.length; i++) { E key = keys[i]; this.map.put(key, key); From c430b5fa56b3f555a2c490fe1dc2fbbe092e2d5e Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 10 Feb 2026 20:19:57 -0500 Subject: [PATCH 73/86] presize gpp section map --- .../src/main/java/com/iab/gpp/encoder/GppModel.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java index 491bb6ec..bc1f2eb1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java @@ -70,10 +70,12 @@ public class GppModel extends AbstractEncodable { } } - private final HashMap> sections = new HashMap<>(); + private final HashMap> sections; private final HeaderV1 header; public GppModel() { + // empirically, most gpp strings have around 2 sections, so pad for more + this.sections = new HashMap<>(4); this.header = new HeaderV1(); } From 86c27fc87fdab08a83fadfb1d56ef77c63676787 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 10 Feb 2026 20:49:14 -0500 Subject: [PATCH 74/86] clean up exceptions --- .../EncodableArrayOfFixedIntegerRanges.java | 36 ++++++++----------- .../encoder/datatype/EncodableBoolean.java | 12 ++----- .../encoder/datatype/EncodableDatetime.java | 12 ++----- .../datatype/EncodableFibonacciInteger.java | 12 ++----- .../EncodableFibonacciIntegerRange.java | 12 ++----- .../datatype/EncodableFixedBitfield.java | 12 ++----- .../datatype/EncodableFixedInteger.java | 12 ++----- .../datatype/EncodableFixedIntegerList.java | 12 ++----- .../datatype/EncodableFixedIntegerRange.java | 12 ++----- .../datatype/EncodableFixedString.java | 12 ++----- .../datatype/EncodableFlexibleBitfield.java | 12 ++----- .../EncodableOptimizedFixedRange.java | 12 ++----- .../segment/AbstractBase64Segment.java | 10 ++++-- 13 files changed, 43 insertions(+), 135 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java index 4fcd35a9..86fa95e5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java @@ -31,34 +31,26 @@ protected DirtyableList initialize() { @Override protected void encode(BitString sb, DirtyableList entries, EncodableSegment segment) { - try { - sb.writeInt(entries.size(), 12); - for (RangeEntry entry : entries) { - sb.writeInt(entry.getKey(), keyBitStringLength); - sb.writeInt(entry.getType(), typeBitStringLength); - FixedIntegerRangeEncoder.encode(sb, entry.getIds()); - } - } catch (Exception e) { - throw new EncodingException(e); + sb.writeInt(entries.size(), 12); + for (RangeEntry entry : entries) { + sb.writeInt(entry.getKey(), keyBitStringLength); + sb.writeInt(entry.getType(), typeBitStringLength); + FixedIntegerRangeEncoder.encode(sb, entry.getIds()); } } @Override protected DirtyableList decode(BitString reader, EncodableSegment segment) { - try { - int size = reader.readInt(12); - DirtyableList value = initialize(); - for (int i = 0; i < size; i++) { - int key = reader.readInt(keyBitStringLength); - int type = reader.readInt(typeBitStringLength); - IntegerSet ids = FixedIntegerRangeEncoder.decode(reader); - RangeEntry entry = new RangeEntry(key, type, ids); - value.add(entry); - } - return value; - } catch (Exception e) { - throw new DecodingException(e); + int size = reader.readInt(12); + DirtyableList value = initialize(); + for (int i = 0; i < size; i++) { + int key = reader.readInt(keyBitStringLength); + int type = reader.readInt(typeBitStringLength); + IntegerSet ids = FixedIntegerRangeEncoder.decode(reader); + RangeEntry entry = new RangeEntry(key, type, ids); + value.add(entry); } + return value; } @SuppressWarnings("unchecked") diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java index 7ab87584..e79a5563 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java @@ -22,19 +22,11 @@ protected Boolean initialize() { @Override protected void encode(BitString builder, Boolean value, EncodableSegment segment){ - try { - builder.writeBoolean(value); - } catch (Exception e) { - throw new EncodingException(e); - } + builder.writeBoolean(value); } @Override protected Boolean decode(BitString reader, EncodableSegment segment) { - try { - return reader.readBoolean(); - } catch (Exception e) { - throw new DecodingException(e); - } + return reader.readBoolean(); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java index dbb829a0..ced43522 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java @@ -21,19 +21,11 @@ protected Instant initialize() { @Override protected void encode(BitString builder, Instant value, EncodableSegment segment) { - try { - DatetimeEncoder.encode(builder, value); - } catch (Exception e) { - throw new EncodingException(e); - } + DatetimeEncoder.encode(builder, value); } @Override protected Instant decode(BitString reader, EncodableSegment segment) { - try { - return DatetimeEncoder.decode(reader); - } catch (Exception e) { - throw new DecodingException(e); - } + return DatetimeEncoder.decode(reader); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java index 6afe0abd..3eb14548 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java @@ -22,19 +22,11 @@ protected Integer initialize() { @Override protected void encode(BitString builder, Integer value, EncodableSegment segment) { - try { - builder.writeFibonacci(value); - } catch (Exception e) { - throw new EncodingException(e); - } + builder.writeFibonacci(value); } @Override protected Integer decode(BitString reader, EncodableSegment segment) { - try { - return reader.readFibonacci(); - } catch (Exception e) { - throw new DecodingException(e); - } + return reader.readFibonacci(); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java index a1401944..3fc74300 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java @@ -21,20 +21,12 @@ public IntegerSet initialize() { @Override protected void encode(BitString builder, IntegerSet value, EncodableSegment segment) { - try { - FibonacciIntegerRangeEncoder.encode(builder, value); - } catch (Exception e) { - throw new EncodingException(e); - } + FibonacciIntegerRangeEncoder.encode(builder, value); } @Override protected IntegerSet decode(BitString reader, EncodableSegment segment) { - try { - return FibonacciIntegerRangeEncoder.decode(reader); - } catch (Exception e) { - throw new DecodingException(e); - } + return FibonacciIntegerRangeEncoder.decode(reader); } @SuppressWarnings("unchecked") diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java index 97c0f5c5..70772d57 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java @@ -29,20 +29,12 @@ protected IntegerSet initialize() { @Override protected void encode(BitString builder, IntegerSet value, EncodableSegment segment) { - try { - FixedBitfieldEncoder.encode(builder, value, this.numElements); - } catch (Exception e) { - throw new EncodingException(e); - } + FixedBitfieldEncoder.encode(builder, value, this.numElements); } @Override protected IntegerSet decode(BitString reader, EncodableSegment segment) { - try { - return reader.readIntegerSet(this.numElements); - } catch (Exception e) { - throw new DecodingException(e); - } + return reader.readIntegerSet(this.numElements); } @SuppressWarnings("unchecked") diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java index f525cbba..9517475f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java @@ -34,19 +34,11 @@ protected Integer initialize() { @Override protected void encode(BitString builder, Integer value, EncodableSegment segment) { - try { - builder.writeInt(value, this.bitStringLength); - } catch (Exception e) { - throw new EncodingException(e); - } + builder.writeInt(value, this.bitStringLength); } @Override protected Integer decode(BitString reader, EncodableSegment segment) { - try { - return IntegerCache.valueOf(reader.readInt(bitStringLength)); - } catch (Exception e) { - throw new DecodingException(e); - } + return IntegerCache.valueOf(reader.readInt(bitStringLength)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java index a79cdb9f..71099a1f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java @@ -32,20 +32,12 @@ protected FixedIntegerList initialize() { @Override protected void encode(BitString builder, FixedIntegerList value, EncodableSegment segment) { - try { - FixedIntegerListEncoder.encode(builder, value, this.elementBitStringLength, this.numElements); - } catch (Exception e) { - throw new EncodingException(e); - } + FixedIntegerListEncoder.encode(builder, value, this.elementBitStringLength, this.numElements); } @Override protected FixedIntegerList decode(BitString reader, EncodableSegment segment) { - try { - return reader.readFixedIntegerList(elementBitStringLength, numElements); - } catch (Exception e) { - throw new DecodingException(e); - } + return reader.readFixedIntegerList(elementBitStringLength, numElements); } @SuppressWarnings("unchecked") diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java index f50abad4..703df231 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java @@ -21,20 +21,12 @@ protected IntegerSet initialize() { @Override protected void encode(BitString builder, IntegerSet value, EncodableSegment segment) { - try { - FixedIntegerRangeEncoder.encode(builder, value); - } catch (Exception e) { - throw new EncodingException(e); - } + FixedIntegerRangeEncoder.encode(builder, value); } @Override protected IntegerSet decode(BitString reader, EncodableSegment segment) { - try { - return FixedIntegerRangeEncoder.decode(reader); - } catch (Exception e) { - throw new DecodingException(e); - } + return FixedIntegerRangeEncoder.decode(reader); } @SuppressWarnings("unchecked") diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java index 696b65d9..0cb1925f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java @@ -30,19 +30,11 @@ protected String initialize() { @Override protected void encode(BitString builder, String value, EncodableSegment segment) { - try { - FixedStringEncoder.encode(builder, value, this.stringLength); - } catch (Exception e) { - throw new EncodingException(e); - } + FixedStringEncoder.encode(builder, value, this.stringLength); } @Override protected String decode(BitString reader, EncodableSegment segment) { - try { - return FixedStringEncoder.decode(reader, this.stringLength); - } catch (Exception e) { - throw new DecodingException(e); - } + return FixedStringEncoder.decode(reader, this.stringLength); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java index aae841a2..e4a10071 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java @@ -25,20 +25,12 @@ protected IntegerSet initialize() { @Override protected void encode(BitString builder, IntegerSet value, EncodableSegment segment) { - try { - FixedBitfieldEncoder.encode(builder, value, this.getLengthSupplier.extract(segment)); - } catch (Exception e) { - throw new EncodingException(e); - } + FixedBitfieldEncoder.encode(builder, value, this.getLengthSupplier.extract(segment)); } @Override protected IntegerSet decode(BitString reader, EncodableSegment segment) { - try { - return reader.readIntegerSet(getLengthSupplier.extract(segment)); - } catch (Exception e) { - throw new DecodingException(e); - } + return reader.readIntegerSet(getLengthSupplier.extract(segment)); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java index f41dd0b1..755d1a39 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java @@ -22,20 +22,12 @@ protected IntegerSet initialize() { @Override protected void encode(BitString builder, IntegerSet value, EncodableSegment segment) { - try { - OptimizedFixedRangeEncoder.encode(builder, value); - } catch (Exception e) { - throw new EncodingException(e); - } + OptimizedFixedRangeEncoder.encode(builder, value); } @Override protected IntegerSet decode(BitString reader, EncodableSegment segment) { - try { - return OptimizedFixedRangeEncoder.decode(reader); - } catch (Exception e) { - throw new DecodingException(e); - } + return OptimizedFixedRangeEncoder.decode(reader); } @SuppressWarnings("unchecked") diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java index 28c3cc80..c2c65d40 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java @@ -20,9 +20,13 @@ protected final CharSequence doEncode() { BitString bitString = new BitString(); int size = fieldNames.size(); for (int i = 0; i < size; i++) { - fieldNames.get(i).encode(bitString, values, i, this); + DataType field = fieldNames.get(i); + try { + field.encode(bitString, values, i, this); + } catch (Exception e) { + throw new DecodingException("Unable to decode " + field.getName(), e); + } } - return getBase64UrlEncoder().encode(bitString); } @@ -36,7 +40,7 @@ protected final void doDecode(CharSequence encodedString) { try { field.decode(bitString, values, i, this); } catch (Exception e) { - throw new DecodingException("Unable to decode " + field, e); + throw new DecodingException("Unable to decode " + field.getName(), e); } } } catch (Exception e) { From dd962e93a31d39a4dfa6fec9e6f4a0aa27f56a00 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 10 Feb 2026 20:57:53 -0500 Subject: [PATCH 75/86] more clean up --- .../gpp/encoder/section/EncodableSection.java | 26 +++++++------------ .../segment/AbstractBase64Segment.java | 3 ++- .../com/iab/gpp/encoder/GppModelTest.java | 3 +++ 3 files changed, 15 insertions(+), 17 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java index 4b10013f..8ccce1f7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java @@ -2,6 +2,8 @@ import java.util.ArrayList; import java.util.List; +import com.iab.gpp.encoder.error.DecodingException; +import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.error.InvalidFieldException; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; @@ -30,30 +32,22 @@ protected final EncodableSegment getSegment(int index) { public abstract int getVersion(); + // this is a default implementation for single segment sections @Override protected void doDecode(CharSequence encodedString) { - int numSegments = size(); - if (numSegments == 1) { - getSegment(0).decode(encodedString); - return; - } - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - for (int i = 0; i < numSegments; i++) { - getSegment(i).decode(encodedSegments.get(i)); + if (size() > 1) { + throw new DecodingException("too many sections to decode"); } + getSegment(0).decode(encodedString); } + // this is a default implementation for single segment sections @Override protected CharSequence doEncode() { - int numSegments = size(); - if (numSegments == 1) { - return getSegment(0).encodeCharSequence(); - } - List encodedSegments = new ArrayList<>(numSegments); - for (int i = 0; i < numSegments; i++) { - encodedSegments.add(getSegment(i).encodeCharSequence()); + if (size() > 1) { + throw new EncodingException("too many sections to encode"); } - return SlicedCharSequence.join('.', encodedSegments); + return getSegment(0).encodeCharSequence(); } public final boolean hasField(FieldKey fieldName) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java index c2c65d40..8e49f8e4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java @@ -4,6 +4,7 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.DataType; import com.iab.gpp.encoder.error.DecodingException; +import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.field.FieldNames; @@ -24,7 +25,7 @@ protected final CharSequence doEncode() { try { field.encode(bitString, values, i, this); } catch (Exception e) { - throw new DecodingException("Unable to decode " + field.getName(), e); + throw new EncodingException("Unable to decode " + field.getName(), e); } } return getBase64UrlEncoder().encode(bitString); diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java index 71aa195c..11721096 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java @@ -658,6 +658,9 @@ public void testEncode1() { gppModel.setFieldValue(TcfEuV2.NAME, TcfEuV2Field.VENDOR_CONSENTS, Arrays.asList(28)); gppModel.setFieldValue(TcfEuV2.NAME, TcfEuV2Field.CREATED, utcDateTime); gppModel.setFieldValue(TcfEuV2.NAME, TcfEuV2Field.LAST_UPDATED, utcDateTime); + Assertions.assertEquals(true, gppModel.hasField(TcfEuV2.NAME, TcfEuV2Field.VERSION)); + Assertions.assertEquals(true, gppModel.getTcfEuV2Section().hasField(TcfEuV2Field.VERSION)); + gppModel.toString(); Assertions.assertEquals("DBABMA~CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAOAAAABAAAAA.QAAA.IAAA", gppModel.encode()); } From f647e9b2f0bd71d9fd7c78613c0d268ba3a86a44 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 10 Feb 2026 21:06:27 -0500 Subject: [PATCH 76/86] test field names to string --- .../main/java/com/iab/gpp/encoder/field/FieldNames.java | 8 ++++++++ .../java/com/iab/gpp/encoder/section/TcfEuV2Test.java | 1 + 2 files changed, 9 insertions(+) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java index 6159bc92..da24656b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java @@ -1,6 +1,9 @@ package com.iab.gpp.encoder.field; +import java.util.ArrayList; +import java.util.Arrays; import java.util.LinkedHashMap; +import java.util.stream.Stream; import com.iab.gpp.encoder.datatype.DataType; public final class FieldNames & FieldKey> { @@ -42,4 +45,9 @@ public E resolveKey(FieldKey key) { return map.get(key); } + @Override + public String toString() { + return Arrays.toString(types); + } + } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java index 404646ff..09f2d2a8 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java @@ -21,6 +21,7 @@ public void testEncode1() { tcfEuV2.setFieldValue(TcfEuV2Field.CREATED, ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); tcfEuV2.setFieldValue(TcfEuV2Field.LAST_UPDATED, ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); Assertions.assertEquals("CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAAAA.QAAA.IAAA", tcfEuV2.encode()); + TcfEuV2Field.TCFEUV2_CORE_SEGMENT_FIELD_NAMES.toString(); } @Test From 0a3f100ce42594783265aff080116f219a2fcb2d Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 10 Feb 2026 21:14:07 -0500 Subject: [PATCH 77/86] fix constant names --- .../EncodableArrayOfFixedIntegerRanges.java | 2 -- .../encoder/datatype/EncodableBoolean.java | 2 -- .../encoder/datatype/EncodableDatetime.java | 2 -- .../datatype/EncodableFibonacciInteger.java | 2 -- .../EncodableFibonacciIntegerRange.java | 2 -- .../datatype/EncodableFixedBitfield.java | 2 -- .../datatype/EncodableFixedInteger.java | 2 -- .../datatype/EncodableFixedIntegerList.java | 2 -- .../datatype/EncodableFixedIntegerRange.java | 2 -- .../datatype/EncodableFixedString.java | 2 -- .../datatype/EncodableFlexibleBitfield.java | 2 -- .../EncodableOptimizedFixedRange.java | 2 -- .../com/iab/gpp/encoder/field/FieldKey.java | 6 ++-- .../com/iab/gpp/encoder/field/FieldNames.java | 2 -- .../com/iab/gpp/encoder/field/UsCaField.java | 22 +++++++------- .../com/iab/gpp/encoder/field/UsCoField.java | 20 ++++++------- .../com/iab/gpp/encoder/field/UsCtField.java | 20 ++++++------- .../com/iab/gpp/encoder/field/UsDeField.java | 22 +++++++------- .../com/iab/gpp/encoder/field/UsFlField.java | 22 +++++++------- .../com/iab/gpp/encoder/field/UsIaField.java | 22 +++++++------- .../com/iab/gpp/encoder/field/UsMtField.java | 22 +++++++------- .../com/iab/gpp/encoder/field/UsNatField.java | 30 +++++++++---------- .../com/iab/gpp/encoder/field/UsNeField.java | 22 +++++++------- .../com/iab/gpp/encoder/field/UsNhField.java | 22 +++++++------- .../com/iab/gpp/encoder/field/UsNjField.java | 22 +++++++------- .../com/iab/gpp/encoder/field/UsOrField.java | 22 +++++++------- .../com/iab/gpp/encoder/field/UsTnField.java | 22 +++++++------- .../com/iab/gpp/encoder/field/UsTxField.java | 22 +++++++------- .../com/iab/gpp/encoder/field/UsUtField.java | 22 +++++++------- .../com/iab/gpp/encoder/field/UsVaField.java | 20 ++++++------- .../gpp/encoder/section/EncodableSection.java | 2 -- 31 files changed, 180 insertions(+), 208 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java index 86fa95e5..2b7b53ea 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java @@ -3,8 +3,6 @@ import java.util.List; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerRangeEncoder; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java index e79a5563..0a21bc52 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java @@ -1,8 +1,6 @@ package com.iab.gpp.encoder.datatype; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java index ced43522..837598d7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java @@ -3,8 +3,6 @@ import java.time.Instant; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.DatetimeEncoder; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java index 3eb14548..45972234 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java @@ -1,8 +1,6 @@ package com.iab.gpp.encoder.datatype; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java index 3fc74300..b0adc05f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java @@ -3,8 +3,6 @@ import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FibonacciIntegerRangeEncoder; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java index 70772d57..e123bb19 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java @@ -3,8 +3,6 @@ import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedBitfieldEncoder; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java index 9517475f..ba726136 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java @@ -2,8 +2,6 @@ import java.util.function.Predicate; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java index 71099a1f..cfad7f65 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java @@ -4,8 +4,6 @@ import java.util.function.Predicate; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerListEncoder; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java index 703df231..b3d3293d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java @@ -3,8 +3,6 @@ import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerRangeEncoder; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java index 0cb1925f..ddf6b3f5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java @@ -2,8 +2,6 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedStringEncoder; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java index e4a10071..7d46c137 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java @@ -3,8 +3,6 @@ import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedBitfieldEncoder; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.SegmentValueProvider; import com.iab.gpp.encoder.segment.EncodableSegment; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java index 755d1a39..5ff248fa 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java @@ -3,8 +3,6 @@ import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.OptimizedFixedRangeEncoder; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java index 10b750da..7cef63c2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java @@ -7,9 +7,9 @@ public interface FieldKey { DataType getType(); - public static final Predicate nullableBooleanAsTwoBitIntegerValidator = (n -> n >= 0 && n <= 2); - public static final Predicate nonNullableBooleanAsTwoBitIntegerValidator = (n -> n >= 1 && n <= 2); - public static final Predicate nullableBooleanAsTwoBitIntegerListValidator = (l -> { + public static final Predicate VALIDATOR_012 = (n -> n >= 0 && n <= 2); + public static final Predicate VALIDATOR_12 = (n -> n >= 1 && n <= 2); + public static final Predicate VALIDATOR_LIST_012 = (l -> { for (int n : l) { if (n < 0 || n > 2) { return false; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java index da24656b..bf44d148 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java @@ -1,9 +1,7 @@ package com.iab.gpp.encoder.field; -import java.util.ArrayList; import java.util.Arrays; import java.util.LinkedHashMap; -import java.util.stream.Stream; import com.iab.gpp.encoder.datatype.DataType; public final class FieldNames & FieldKey> { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java index 7cb4bb22..3df1a52e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java @@ -10,26 +10,26 @@ public enum UsCaField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsCa.VERSION)), SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), SHARING_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SharingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SharingOptOutNotice", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_LIMIT_USE_NOTICE( - new EncodableFixedInteger<>("SensitiveDataLimitUseNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SensitiveDataLimitUseNotice", 2, 0, VALIDATOR_012)), SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), SHARING_OPT_OUT( - new EncodableFixedInteger<>("SharingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SharingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( - new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 9, nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 2, nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 9, VALIDATOR_LIST_012)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 2, VALIDATOR_LIST_012)), PERSONAL_DATA_CONSENTS( - new EncodableFixedInteger<>("PersonalDataConsents",2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("PersonalDataConsents",2, 0, VALIDATOR_012)), MSPA_COVERED_TRANSACTION( - new EncodableFixedInteger<>("MspaCoveredTransaction",2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaCoveredTransaction",2, 1, VALIDATOR_12)), MSPA_OPT_OUT_OPTION_MODE( - new EncodableFixedInteger<>("MspaOptOutOptionMode",2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaOptOutOptionMode",2, 0, VALIDATOR_012)), MSPA_SERVICE_PROVIDER_MODE( - new EncodableFixedInteger<>("MspaServiceProviderMode",2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaServiceProviderMode",2, 0, VALIDATOR_012)), GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java index 84b431ec..eb27198d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java @@ -10,24 +10,24 @@ public enum UsCoField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsCo.VERSION)), SHARING_NOTICE( - new EncodableFixedInteger<>("SharingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SharingNotice", 2, 0, VALIDATOR_012)), SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( - new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SENSITIVE_DATA_PROCESSING(new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 7, nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), + SENSITIVE_DATA_PROCESSING(new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 7, VALIDATOR_LIST_012)), KNOWN_CHILD_SENSITIVE_DATA_CONSENTS( - new EncodableFixedInteger<>("KnownChildSensitiveDataConsents", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("KnownChildSensitiveDataConsents", 2, 0, VALIDATOR_012)), MSPA_COVERED_TRANSACTION( - new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, VALIDATOR_12)), MSPA_OPT_OUT_OPTION_MODE( - new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, VALIDATOR_012)), MSPA_SERVICE_PROVIDER_MODE( - new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, VALIDATOR_012)), GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java index 5aa4d8fa..bd06a729 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java @@ -10,24 +10,24 @@ public enum UsCtField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsCt.VERSION)), SHARING_NOTICE( - new EncodableFixedInteger<>("SharingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SharingNotice", 2, 0, VALIDATOR_012)), SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice",2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice",2, 0, VALIDATOR_012)), SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( - new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( - new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, VALIDATOR_LIST_012)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, VALIDATOR_LIST_012)), MSPA_COVERED_TRANSACTION( - new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, VALIDATOR_12)), MSPA_OPT_OUT_OPTION_MODE( - new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, VALIDATOR_012)), MSPA_SERVICE_PROVIDER_MODE( - new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, VALIDATOR_012)), GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java index ad7a0a7e..eafe0c14 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java @@ -10,27 +10,27 @@ public enum UsDeField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsDe.VERSION)), PROCESSING_NOTICE( - new EncodableFixedInteger<>("ProcessingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("ProcessingNotice", 2, 0, VALIDATOR_012)), SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( - new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( - new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 9, nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 9, VALIDATOR_LIST_012)), KNOWN_CHILD_SENSITIVE_DATA_CONSENTS( - new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 5, nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 5, VALIDATOR_LIST_012)), ADDITIONAL_DATA_PROCESSING_CONSENT( - new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, VALIDATOR_012)), MSPA_COVERED_TRANSACTION( - new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, VALIDATOR_12)), MSPA_OPT_OUT_OPTION_MODE( - new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, VALIDATOR_012)), MSPA_SERVICE_PROVIDER_MODE( - new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, VALIDATOR_012)), GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java index 3962017d..ec76b719 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java @@ -8,26 +8,26 @@ public enum UsFlField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsFl.VERSION)), PROCESSING_NOTICE( - new EncodableFixedInteger<>("ProcessingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("ProcessingNotice", 2, 0, VALIDATOR_012)), SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( - new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( - new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, VALIDATOR_LIST_012)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, VALIDATOR_LIST_012)), ADDITIONAL_DATA_PROCESSING_CONSENT( - new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, VALIDATOR_012)), MSPA_COVERED_TRANSACTION( - new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, VALIDATOR_12)), MSPA_OPT_OUT_OPTION_MODE( - new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, VALIDATOR_012)), MSPA_SERVICE_PROVIDER_MODE( - new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)); + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, VALIDATOR_012)); private final DataType type; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java index f002508e..cd6ebb8e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java @@ -10,27 +10,27 @@ public enum UsIaField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsIa.VERSION)), PROCESSING_NOTICE( - new EncodableFixedInteger<>("ProcessingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("ProcessingNotice", 2, 0, VALIDATOR_012)), SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SensitiveDataOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SensitiveDataOptOutNotice", 2, 0, VALIDATOR_012)), SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( - new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( - new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, VALIDATOR_LIST_012)), KNOWN_CHILD_SENSITIVE_DATA_CONSENTS( - new EncodableFixedInteger<>("KnownChildSensitiveDataConsents", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("KnownChildSensitiveDataConsents", 2, 0, VALIDATOR_012)), MSPA_COVERED_TRANSACTION( - new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, VALIDATOR_12)), MSPA_OPT_OUT_OPTION_MODE( - new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, VALIDATOR_012)), MSPA_SERVICE_PROVIDER_MODE( - new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, VALIDATOR_012)), GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java index 43e39200..e35c7dc4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java @@ -10,26 +10,26 @@ public enum UsMtField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsMt.VERSION)), SHARING_NOTICE( - new EncodableFixedInteger<>("SharingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SharingNotice", 2, 0, VALIDATOR_012)), SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( - new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( - new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, VALIDATOR_LIST_012)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, VALIDATOR_LIST_012)), ADDITIONAL_DATA_PROCESSING_CONSENT( - new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, VALIDATOR_012)), MSPA_COVERED_TRANSACTION( - new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, VALIDATOR_12)), MSPA_OPT_OUT_OPTION_MODE( - new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, VALIDATOR_012)), MSPA_SERVICE_PROVIDER_MODE( - new EncodableFixedInteger<>("MspaServiceProviderMode",2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaServiceProviderMode",2, 0, VALIDATOR_012)), GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java index 791f5c92..56af13a5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java @@ -10,34 +10,34 @@ public enum UsNatField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsNat.VERSION)), SHARING_NOTICE( - new EncodableFixedInteger<>("SharingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SharingNotice", 2, 0, VALIDATOR_012)), SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), SHARING_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SharingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SharingOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SensitiveDataProcessingOptOutNotice",2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SensitiveDataProcessingOptOutNotice",2, 0, VALIDATOR_012)), SENSITIVE_DATA_LIMIT_USE_NOTICE( - new EncodableFixedInteger<>("SensitiveDataLimitUseNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SensitiveDataLimitUseNotice", 2, 0, VALIDATOR_012)), SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), SHARING_OPT_OUT( - new EncodableFixedInteger<>("SharingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SharingOptOut", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( - new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( - new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 16, nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 16, VALIDATOR_LIST_012)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, VALIDATOR_LIST_012)), PERSONAL_DATA_CONSENTS( - new EncodableFixedInteger<>("PersonalDataConsents", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("PersonalDataConsents", 2, 0, VALIDATOR_012)), MSPA_COVERED_TRANSACTION( - new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, VALIDATOR_12)), MSPA_OPT_OUT_OPTION_MODE( - new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, VALIDATOR_012)), MSPA_SERVICE_PROVIDER_MODE( - new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, VALIDATOR_012)), GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java index efa39c8b..4783273f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java @@ -10,27 +10,27 @@ public enum UsNeField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsNe.VERSION)), PROCESSING_NOTICE( - new EncodableFixedInteger<>("ProcessingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("ProcessingNotice", 2, 0, VALIDATOR_012)), SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( - new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( - new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, VALIDATOR_LIST_012)), KNOWN_CHILD_SENSITIVE_DATA_CONSENTS( - new EncodableFixedInteger<>("KnownChildSensitiveDataConsents", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("KnownChildSensitiveDataConsents", 2, 0, VALIDATOR_012)), ADDITIONAL_DATA_PROCESSING_CONSENT( - new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, VALIDATOR_012)), MSPA_COVERED_TRANSACTION( - new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, VALIDATOR_12)), MSPA_OPT_OUT_OPTION_MODE( - new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, VALIDATOR_012)), MSPA_SERVICE_PROVIDER_MODE( - new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, VALIDATOR_012)), GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java index 3808b71d..f296551a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java @@ -10,26 +10,26 @@ public enum UsNhField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsNh.VERSION)), PROCESSING_NOTICE( - new EncodableFixedInteger<>("ProcessingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("ProcessingNotice", 2, 0, VALIDATOR_012)), SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( - new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( - new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, VALIDATOR_LIST_012)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, VALIDATOR_LIST_012)), ADDITIONAL_DATA_PROCESSING_CONSENT( - new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, VALIDATOR_012)), MSPA_COVERED_TRANSACTION( - new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, VALIDATOR_12)), MSPA_OPT_OUT_OPTION_MODE( - new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, VALIDATOR_012)), MSPA_SERVICE_PROVIDER_MODE( - new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, VALIDATOR_012)), GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java index e0a5af8d..061cb5ae 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java @@ -10,26 +10,26 @@ public enum UsNjField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsNj.VERSION)), PROCESSING_NOTICE( - new EncodableFixedInteger<>("ProcessingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("ProcessingNotice", 2, 0, VALIDATOR_012)), SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice",2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice",2, 0, VALIDATOR_012)), SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut",2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOut",2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( - new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( - new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 10, nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 5, nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 10, VALIDATOR_LIST_012)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 5, VALIDATOR_LIST_012)), ADDITIONAL_DATA_PROCESSING_CONSENT( - new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, VALIDATOR_012)), MSPA_COVERED_TRANSACTION( - new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, VALIDATOR_12)), MSPA_OPT_OUT_OPTION_MODE( - new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, VALIDATOR_012)), MSPA_SERVICE_PROVIDER_MODE( - new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, VALIDATOR_012)), GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java index f9cb55a9..4061920d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java @@ -10,26 +10,26 @@ public enum UsOrField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsOr.VERSION)), PROCESSING_NOTICE( - new EncodableFixedInteger<>("ProcessingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("ProcessingNotice", 2, 0, VALIDATOR_012)), SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( - new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( - new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 11, nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 11, VALIDATOR_LIST_012)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, VALIDATOR_LIST_012)), ADDITIONAL_DATA_PROCESSING_CONSENT( - new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, VALIDATOR_012)), MSPA_COVERED_TRANSACTION( - new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, VALIDATOR_12)), MSPA_OPT_OUT_OPTION_MODE( - new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, VALIDATOR_012)), MSPA_SERVICE_PROVIDER_MODE( - new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, VALIDATOR_012)), GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java index f83e0207..83cba306 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java @@ -10,27 +10,27 @@ public enum UsTnField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsTn.VERSION)), PROCESSING_NOTICE( - new EncodableFixedInteger<>("ProcessingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("ProcessingNotice", 2, 0, VALIDATOR_012)), SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice",2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOutNotice",2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( - new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( - new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, VALIDATOR_LIST_012)), KNOWN_CHILD_SENSITIVE_DATA_CONSENTS( - new EncodableFixedInteger<>("KnownChildSensitiveDataConsents", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("KnownChildSensitiveDataConsents", 2, 0, VALIDATOR_012)), ADDITIONAL_DATA_PROCESSING_CONSENT( - new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, VALIDATOR_012)), MSPA_COVERED_TRANSACTION( - new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, VALIDATOR_12)), MSPA_OPT_OUT_OPTION_MODE( - new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, VALIDATOR_012)), MSPA_SERVICE_PROVIDER_MODE( - new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, VALIDATOR_012)), GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java index eb16dbeb..91d5cc17 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java @@ -10,27 +10,27 @@ public enum UsTxField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsTx.VERSION)), PROCESSING_NOTICE( - new EncodableFixedInteger<>("ProcessingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("ProcessingNotice", 2, 0, VALIDATOR_012)), SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( - new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( - new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, VALIDATOR_LIST_012)), KNOWN_CHILD_SENSITIVE_DATA_CONSENTS( - new EncodableFixedInteger<>("KnownChildSensitiveDataConsents", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("KnownChildSensitiveDataConsents", 2, 0, VALIDATOR_012)), ADDITIONAL_DATA_PROCESSING_CONSENT( - new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, VALIDATOR_012)), MSPA_COVERED_TRANSACTION( - new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, VALIDATOR_12)), MSPA_OPT_OUT_OPTION_MODE( - new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, VALIDATOR_012)), MSPA_SERVICE_PROVIDER_MODE( - new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, VALIDATOR_012)), GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java index 47c9ba4c..0c36f6be 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java @@ -8,27 +8,27 @@ public enum UsUtField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsUt.VERSION)), SHARING_NOTICE( - new EncodableFixedInteger<>("SharingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SharingNotice", 2, 0, VALIDATOR_012)), SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SensitiveDataProcessingOptOutNotice",2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SensitiveDataProcessingOptOutNotice",2, 0, VALIDATOR_012)), SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut",2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOut",2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( - new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( - new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, VALIDATOR_LIST_012)), KNOWN_CHILD_SENSITIVE_DATA_CONSENTS( - new EncodableFixedInteger<>("KnownChildSensitiveDataConsents", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("KnownChildSensitiveDataConsents", 2, 0, VALIDATOR_012)), MSPA_COVERED_TRANSACTION( - new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, VALIDATOR_12)), MSPA_OPT_OUT_OPTION_MODE( - new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, VALIDATOR_012)), MSPA_SERVICE_PROVIDER_MODE( - new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)); + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, VALIDATOR_012)); private final DataType type; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java index 9f013cc2..287eaf55 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java @@ -8,25 +8,25 @@ public enum UsVaField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsVa.VERSION)), SHARING_NOTICE( - new EncodableFixedInteger<>("SharingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SharingNotice", 2, 0, VALIDATOR_012)), SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( - new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( - new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, VALIDATOR_LIST_012)), KNOWN_CHILD_SENSITIVE_DATA_CONSENTS( - new EncodableFixedInteger<>("KnownChildSensitiveDataConsents", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("KnownChildSensitiveDataConsents", 2, 0, VALIDATOR_012)), MSPA_COVERED_TRANSACTION( - new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, VALIDATOR_12)), MSPA_OPT_OUT_OPTION_MODE( - new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, VALIDATOR_012)), MSPA_SERVICE_PROVIDER_MODE( - new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)); + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, VALIDATOR_012)); private final DataType type; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java index 8ccce1f7..169bf43e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java @@ -1,7 +1,5 @@ package com.iab.gpp.encoder.section; -import java.util.ArrayList; -import java.util.List; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.error.InvalidFieldException; From 558aaa2e88566654b159e90d4e7d09ceac5969d6 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 10 Feb 2026 21:15:19 -0500 Subject: [PATCH 78/86] optimize validator --- .../src/main/java/com/iab/gpp/encoder/field/FieldKey.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java index 7cef63c2..a56603f6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java @@ -10,7 +10,9 @@ public interface FieldKey { public static final Predicate VALIDATOR_012 = (n -> n >= 0 && n <= 2); public static final Predicate VALIDATOR_12 = (n -> n >= 1 && n <= 2); public static final Predicate VALIDATOR_LIST_012 = (l -> { - for (int n : l) { + int size = l.size(); + for (int i = 0; i < size; i++) { + int n = l.getInt(i); if (n < 0 || n > 2) { return false; } From 1fb8dabaac5cec09e20589a7946ed79accce5835 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Wed, 11 Feb 2026 10:28:59 -0500 Subject: [PATCH 79/86] move source and add jacoco --- iabgpp-encoder/pom.xml | 12 ++++++++---- iabgpp-extras-jackson/pom.xml | 12 ++++++++---- iabgpp-extras/pom.xml | 12 ++++++++---- pom.xml | 19 +++++++++++++++++++ 4 files changed, 43 insertions(+), 12 deletions(-) diff --git a/iabgpp-encoder/pom.xml b/iabgpp-encoder/pom.xml index 0592e79a..2dd832a9 100644 --- a/iabgpp-encoder/pom.xml +++ b/iabgpp-encoder/pom.xml @@ -27,10 +27,18 @@ maven-surefire-plugin + + org.jacoco + jacoco-maven-plugin + org.apache.maven.plugins maven-javadoc-plugin + + org.apache.maven.plugins + maven-source-plugin + com.diffplug.spotless spotless-maven-plugin @@ -43,10 +51,6 @@ release - - org.apache.maven.plugins - maven-source-plugin - org.apache.maven.plugins maven-gpg-plugin diff --git a/iabgpp-extras-jackson/pom.xml b/iabgpp-extras-jackson/pom.xml index ac1a1a3f..8c0abb61 100644 --- a/iabgpp-extras-jackson/pom.xml +++ b/iabgpp-extras-jackson/pom.xml @@ -46,10 +46,18 @@ maven-surefire-plugin + + org.jacoco + jacoco-maven-plugin + org.apache.maven.plugins maven-javadoc-plugin + + org.apache.maven.plugins + maven-source-plugin + com.diffplug.spotless spotless-maven-plugin @@ -62,10 +70,6 @@ release - - org.apache.maven.plugins - maven-source-plugin - org.apache.maven.plugins maven-gpg-plugin diff --git a/iabgpp-extras/pom.xml b/iabgpp-extras/pom.xml index 6673191a..ddfd0e54 100644 --- a/iabgpp-extras/pom.xml +++ b/iabgpp-extras/pom.xml @@ -18,10 +18,18 @@ maven-surefire-plugin + + org.jacoco + jacoco-maven-plugin + org.apache.maven.plugins maven-javadoc-plugin + + org.apache.maven.plugins + maven-source-plugin + com.diffplug.spotless spotless-maven-plugin @@ -34,10 +42,6 @@ release - - org.apache.maven.plugins - maven-source-plugin - org.apache.maven.plugins maven-gpg-plugin diff --git a/pom.xml b/pom.xml index 7c1921bb..19a38623 100644 --- a/pom.xml +++ b/pom.xml @@ -66,6 +66,25 @@ maven-surefire-plugin 2.22.2 + + org.jacoco + jacoco-maven-plugin + 0.8.14 + + + + prepare-agent + + + + report + test + + report + + + + com.diffplug.spotless spotless-maven-plugin From ff3f858c65fde9a033a410916eca29fdeddd17e8 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Thu, 19 Feb 2026 10:23:42 -0500 Subject: [PATCH 80/86] use SNAPSHOT instead of RC1 --- iabgpp-encoder/pom.xml | 2 +- iabgpp-extras-jackson/pom.xml | 4 ++-- iabgpp-extras/pom.xml | 2 +- pom.xml | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/iabgpp-encoder/pom.xml b/iabgpp-encoder/pom.xml index 07caf281..3eecb8a6 100644 --- a/iabgpp-encoder/pom.xml +++ b/iabgpp-encoder/pom.xml @@ -7,7 +7,7 @@ com.iabgpp iabgpp-core - 4.0.0-RC1 + 4.0.0-SNAPSHOT iabgpp-encoder diff --git a/iabgpp-extras-jackson/pom.xml b/iabgpp-extras-jackson/pom.xml index b62612ba..a594e513 100644 --- a/iabgpp-extras-jackson/pom.xml +++ b/iabgpp-extras-jackson/pom.xml @@ -7,7 +7,7 @@ iabgpp-core com.iabgpp - 4.0.0-RC1 + 4.0.0-SNAPSHOT iabgpp-extras-jackson @@ -24,7 +24,7 @@ com.iabgpp iabgpp-extras - 4.0.0-RC1 + 4.0.0-SNAPSHOT diff --git a/iabgpp-extras/pom.xml b/iabgpp-extras/pom.xml index b14f682e..52175c2a 100644 --- a/iabgpp-extras/pom.xml +++ b/iabgpp-extras/pom.xml @@ -7,7 +7,7 @@ com.iabgpp iabgpp-core - 4.0.0-RC1 + 4.0.0-SNAPSHOT iabgpp-extras diff --git a/pom.xml b/pom.xml index b79ba53c..2965bb86 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.iabgpp iabgpp-core - 4.0.0-RC1 + 4.0.0-SNAPSHOT IAB GPP Core Library https://github.com/IABTechLabs/iabtcf-java Encode and decode consent information with the IAB GPP v3.0. From 0ff66acc0d7f047355ee97abbb3fb42430fc1bc7 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Thu, 19 Feb 2026 10:28:08 -0500 Subject: [PATCH 81/86] spotless apply --- .../java/com/iab/gpp/encoder/GppModel.java | 26 +- .../base64/AbstractBase64UrlEncoder.java | 23 +- .../base64/CompressedBase64UrlEncoder.java | 9 +- .../base64/TraditionalBase64UrlEncoder.java | 5 +- .../com/iab/gpp/encoder/bitstring/BitSet.java | 38 +- .../iab/gpp/encoder/bitstring/BitString.java | 9 +- .../AbstractDirtyableBitStringDataType.java | 5 +- .../AbstractEncodableBitStringDataType.java | 11 +- .../iab/gpp/encoder/datatype/DataType.java | 22 +- .../iab/gpp/encoder/datatype/Dirtyable.java | 1 + .../EncodableArrayOfFixedIntegerRanges.java | 14 +- .../encoder/datatype/EncodableBoolean.java | 5 +- .../encoder/datatype/EncodableDatetime.java | 5 +- .../datatype/EncodableFibonacciInteger.java | 3 +- .../EncodableFibonacciIntegerRange.java | 5 +- .../datatype/EncodableFixedBitfield.java | 5 +- .../datatype/EncodableFixedInteger.java | 14 +- .../datatype/EncodableFixedIntegerList.java | 13 +- .../datatype/EncodableFixedIntegerRange.java | 5 +- .../datatype/EncodableFixedString.java | 7 +- .../datatype/EncodableFlexibleBitfield.java | 8 +- .../EncodableOptimizedFixedRange.java | 6 +- .../encoder/datatype/FixedIntegerList.java | 14 +- .../gpp/encoder/datatype/IntegerCache.java | 5 +- .../iab/gpp/encoder/datatype/IntegerSet.java | 17 +- .../iab/gpp/encoder/datatype/RangeEntry.java | 1 - .../encoder/datatype/UnencodableBoolean.java | 6 +- .../datatype/UnencodableCharacter.java | 8 +- .../encoder/datatype/UnencodableInteger.java | 3 +- .../datatype/encoder/DatetimeEncoder.java | 2 +- .../encoder/FibonacciIntegerEncoder.java | 1 + .../encoder/FibonacciIntegerRangeEncoder.java | 2 +- .../encoder/FixedIntegerListEncoder.java | 5 +- .../encoder/FixedIntegerRangeEncoder.java | 2 +- .../datatype/encoder/FixedStringEncoder.java | 1 + .../com/iab/gpp/encoder/field/FieldKey.java | 23 +- .../com/iab/gpp/encoder/field/FieldNames.java | 9 +- .../iab/gpp/encoder/field/HeaderV1Field.java | 12 +- .../iab/gpp/encoder/field/TcfCaV1Field.java | 79 +++-- .../iab/gpp/encoder/field/TcfEuV2Field.java | 96 ++--- .../com/iab/gpp/encoder/field/UsCaField.java | 67 ++-- .../com/iab/gpp/encoder/field/UsCoField.java | 53 ++- .../com/iab/gpp/encoder/field/UsCtField.java | 55 ++- .../com/iab/gpp/encoder/field/UsDeField.java | 52 ++- .../com/iab/gpp/encoder/field/UsFlField.java | 44 ++- .../com/iab/gpp/encoder/field/UsIaField.java | 52 ++- .../com/iab/gpp/encoder/field/UsMtField.java | 57 ++- .../com/iab/gpp/encoder/field/UsNatField.java | 75 ++-- .../com/iab/gpp/encoder/field/UsNeField.java | 52 ++- .../com/iab/gpp/encoder/field/UsNhField.java | 55 ++- .../com/iab/gpp/encoder/field/UsNjField.java | 57 ++- .../com/iab/gpp/encoder/field/UsOrField.java | 55 ++- .../com/iab/gpp/encoder/field/UsTnField.java | 52 ++- .../com/iab/gpp/encoder/field/UsTxField.java | 52 ++- .../com/iab/gpp/encoder/field/UsUtField.java | 43 ++- .../com/iab/gpp/encoder/field/UsVaField.java | 39 +-- .../com/iab/gpp/encoder/field/UspV1Field.java | 19 +- .../encoder/section/AbstractEncodable.java | 3 +- .../encoder/section/AbstractUsSection.java | 1 - .../section/AbstractUsSectionWithGpc.java | 14 +- .../gpp/encoder/section/EncodableSection.java | 10 +- .../encoder/section/SlicedCharSequence.java | 2 - .../com/iab/gpp/encoder/section/TcfCaV1.java | 36 +- .../com/iab/gpp/encoder/section/TcfEuV2.java | 39 ++- .../com/iab/gpp/encoder/section/UsCa.java | 4 +- .../com/iab/gpp/encoder/section/UsCo.java | 4 +- .../com/iab/gpp/encoder/section/UsCt.java | 4 +- .../com/iab/gpp/encoder/section/UsDe.java | 4 +- .../com/iab/gpp/encoder/section/UsIa.java | 4 +- .../com/iab/gpp/encoder/section/UsMt.java | 4 +- .../com/iab/gpp/encoder/section/UsNe.java | 5 +- .../com/iab/gpp/encoder/section/UsNh.java | 4 +- .../com/iab/gpp/encoder/section/UsNj.java | 4 +- .../com/iab/gpp/encoder/section/UsOr.java | 4 +- .../com/iab/gpp/encoder/section/UsTn.java | 4 +- .../com/iab/gpp/encoder/section/UsTx.java | 4 +- .../com/iab/gpp/encoder/section/UsUt.java | 2 - .../segment/AbstractBase64Segment.java | 11 +- .../AbstractLazilyEncodableSegment.java | 4 +- .../gpp/encoder/segment/Base64Segment.java | 1 - .../encoder/segment/SegmentValueProvider.java | 5 +- .../segment/TraditionalBase64Segment.java | 4 +- .../gpp/encoder/segment/UsNatCoreSegment.java | 6 +- .../gpp/encoder/segment/UspV1CoreSegment.java | 4 +- .../com/iab/gpp/encoder/GppModelTest.java | 331 ++++++++++-------- .../TraditionalBase64UrlEncoderTest.java | 15 +- .../encoder/datatype/DirtyableListTest.java | 10 +- .../EncodableFixedIntegerRangeTest.java | 28 +- .../EncodableOptimizedFixedRangeTest.java | 33 +- .../datatype/FixedIntegerListEncoderTest.java | 12 +- .../datatype/FixedIntegerListTest.java | 4 +- .../datatype/encoder/BooleanEncoderTest.java | 6 +- .../datatype/encoder/DatetimeEncoderTest.java | 5 +- .../encoder/FibonacciIntegerEncoderTest.java | 14 +- .../FibonacciIntegerRangeEncoderTest.java | 16 +- .../encoder/FixedBitfieldEncoderTest.java | 15 +- .../encoder/FixedIntegerEncoderTest.java | 7 +- .../encoder/FixedIntegerRangeEncoderTest.java | 52 +-- .../encoder/FixedLongEncoderTest.java | 8 +- .../encoder/FixedStringEncoderTest.java | 7 +- .../datatype/encoder/IntegerSetTest.java | 22 +- .../iab/gpp/encoder/section/HeaderV1Test.java | 23 +- .../iab/gpp/encoder/section/TcfCaV1Test.java | 165 +++++---- .../iab/gpp/encoder/section/TcfEuV2Test.java | 314 +++++++++-------- .../com/iab/gpp/encoder/section/UsCaTest.java | 78 +++-- .../com/iab/gpp/encoder/section/UsCoTest.java | 58 +-- .../com/iab/gpp/encoder/section/UsCtTest.java | 66 ++-- .../com/iab/gpp/encoder/section/UsDeTest.java | 79 +++-- .../com/iab/gpp/encoder/section/UsFlTest.java | 27 +- .../com/iab/gpp/encoder/section/UsIaTest.java | 70 ++-- .../com/iab/gpp/encoder/section/UsMtTest.java | 70 ++-- .../iab/gpp/encoder/section/UsNatTest.java | 98 +++--- .../com/iab/gpp/encoder/section/UsNeTest.java | 70 ++-- .../com/iab/gpp/encoder/section/UsNhTest.java | 70 ++-- .../com/iab/gpp/encoder/section/UsNjTest.java | 79 +++-- .../com/iab/gpp/encoder/section/UsOrTest.java | 73 ++-- .../com/iab/gpp/encoder/section/UsTnTest.java | 70 ++-- .../com/iab/gpp/encoder/section/UsTxTest.java | 70 ++-- .../com/iab/gpp/encoder/section/UsUtTest.java | 68 ++-- .../com/iab/gpp/encoder/section/UsVaTest.java | 25 +- .../iab/gpp/encoder/section/UspV1Test.java | 5 +- .../com/iab/gpp/extras/jackson/Loader.java | 4 +- .../com/iab/gpp/extras/jackson/cmp/Cmp.java | 6 +- .../gpp/extras/jackson/gvl/DataCategory.java | 2 - .../com/iab/gpp/extras/jackson/gvl/Gvl.java | 25 +- .../iab/gpp/extras/jackson/gvl/Overflow.java | 1 - .../iab/gpp/extras/jackson/gvl/Purpose.java | 8 +- .../extras/jackson/gvl/SpecialFeature.java | 4 +- .../extras/jackson/gvl/SpecialPurpose.java | 8 +- .../iab/gpp/extras/jackson/gvl/Vendor.java | 38 +- .../iab/gpp/extras/jackson/gvl/VendorUrl.java | 1 - .../gpp/extras/jackson/cmp/CmpListTest.java | 14 +- .../gpp/extras/jackson/gvl/GvlCanadaTest.java | 189 +++++----- .../iab/gpp/extras/jackson/gvl/GvlV2Test.java | 60 ++-- .../iab/gpp/extras/jackson/gvl/GvlV3Test.java | 185 ++++++---- .../java/com/iab/gpp/extras/cmp/CmpList.java | 1 - .../com/iab/gpp/extras/gvl/DataCategory.java | 1 - .../com/iab/gpp/extras/gvl/DataRetention.java | 2 - .../main/java/com/iab/gpp/extras/gvl/Gvl.java | 2 +- .../java/com/iab/gpp/extras/gvl/Overflow.java | 5 +- .../java/com/iab/gpp/extras/gvl/Purpose.java | 10 +- .../iab/gpp/extras/gvl/SpecialFeature.java | 4 +- .../iab/gpp/extras/gvl/SpecialPurpose.java | 8 +- .../java/com/iab/gpp/extras/gvl/Vendor.java | 62 ++-- .../com/iab/gpp/extras/gvl/VendorUrl.java | 1 - 145 files changed, 2320 insertions(+), 2079 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java index bc1f2eb1..7ab69f1c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java @@ -1,10 +1,5 @@ package com.iab.gpp.encoder; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.PrimitiveIterator; -import java.util.function.Supplier; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.InvalidFieldException; import com.iab.gpp.encoder.field.FieldKey; @@ -31,13 +26,19 @@ import com.iab.gpp.encoder.section.UsUt; import com.iab.gpp.encoder.section.UsVa; import com.iab.gpp.encoder.section.UspV1; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.PrimitiveIterator; +import java.util.function.Supplier; public class GppModel extends AbstractEncodable { // NOTE: we genrally use concrete types to avoid the cost of interface calls - private static final HashMap>> SECTION_ID_TO_CONSTRUCTOR = new HashMap<>(); + private static final HashMap>> SECTION_ID_TO_CONSTRUCTOR = + new HashMap<>(); private static final HashMap SECTION_NAME_TO_ID = new HashMap<>(); - + static { List>> constructors = new ArrayList<>(); @@ -265,7 +266,7 @@ public List getSectionIds() { protected CharSequence doEncode() { List encodedSections = new ArrayList<>(); encodedSections.add(header.encodeCharSequence()); - for (Integer sectionId: header.getSectionsIds()) { + for (Integer sectionId : header.getSectionsIds()) { EncodableSection section = sections.get(sectionId); encodedSections.add(section.encodeCharSequence()); } @@ -280,7 +281,7 @@ protected void doDecode(CharSequence str) { header.getSectionsIds().clear(); } - if(str != null && !str.isEmpty()) { + if (str != null && !str.isEmpty()) { List encodedSections = SlicedCharSequence.split(str, '~'); header.decode(encodedSections.get(0)); @@ -336,7 +337,7 @@ public String toString() { ensureDecode(); StringBuilder sb = new StringBuilder(); sb.append('[').append(header); - for (Integer sectionId: header.getSectionsIds()) { + for (Integer sectionId : header.getSectionsIds()) { EncodableSection section = sections.get(sectionId); sb.append(", ").append(section); } @@ -349,7 +350,7 @@ public boolean isDirty() { if (header.isDirty()) { return true; } - for (Integer sectionId: header.getSectionsIds()) { + for (Integer sectionId : header.getSectionsIds()) { EncodableSection section = sections.get(sectionId); if (section != null && section.isDirty()) { return true; @@ -361,12 +362,11 @@ public boolean isDirty() { @Override public void setDirty(boolean dirty) { header.setDirty(dirty); - for (Integer sectionId: header.getSectionsIds()) { + for (Integer sectionId : header.getSectionsIds()) { EncodableSection section = sections.get(sectionId); if (section != null) { section.setDirty(true); } } } - } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java index 5d56cd5e..7e2f413f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java @@ -1,10 +1,10 @@ package com.iab.gpp.encoder.base64; -import java.util.Arrays; import com.iab.gpp.encoder.bitstring.BitSet; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; +import java.util.Arrays; public abstract class AbstractBase64UrlEncoder { @@ -12,13 +12,17 @@ public abstract class AbstractBase64UrlEncoder { private static final int BASE64_BITS = 6; private static final int NO_SYMBOL = -1; + /** * Base 64 URL character set. Different from standard Base64 char set in that '+' and '/' are * replaced with '-' and '_'. */ - private static final String DICT = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"; + private static final String DICT = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"; + private static final int REVERSE_DICT_SIZE = 128; private static final int[] REVERSE_DICT = new int[REVERSE_DICT_SIZE]; + static { Arrays.fill(REVERSE_DICT, NO_SYMBOL); for (int i = 0; i < DICT.length(); i++) { @@ -59,9 +63,9 @@ public BitString decode(CharSequence str) { throw new DecodingException("Undecodable Base64URL string"); } int bits0 = b1 << 18 | b2 << 12 | b3 << 6 | b4; - words[dst++] = (byte)(bits0 >> 16); - words[dst++] = (byte)(bits0 >> 8); - words[dst++] = (byte)(bits0); + words[dst++] = (byte) (bits0 >> 16); + words[dst++] = (byte) (bits0 >> 8); + words[dst++] = (byte) (bits0); } if (length > limit) { remainder(str, words, length, src, dst); @@ -72,7 +76,8 @@ public BitString decode(CharSequence str) { } } - private static final void remainder(CharSequence str, byte[] words, int length, int src, int dst) { + private static final void remainder( + CharSequence str, byte[] words, int length, int src, int dst) { int b1 = src < length ? REVERSE_DICT[str.charAt(src)] : 0; src++; int b2 = src < length ? REVERSE_DICT[str.charAt(src)] : 0; @@ -85,8 +90,8 @@ private static final void remainder(CharSequence str, byte[] words, int length, throw new DecodingException("Undecodable Base64URL string"); } int bits0 = b1 << 18 | b2 << 12 | b3 << 6 | b4; - words[dst++] = (byte)(bits0 >> 16); - words[dst++] = (byte)(bits0 >> 8); - words[dst++] = (byte)(bits0); + words[dst++] = (byte) (bits0 >> 16); + words[dst++] = (byte) (bits0 >> 8); + words[dst++] = (byte) (bits0); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/CompressedBase64UrlEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/CompressedBase64UrlEncoder.java index b4527851..cdeff122 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/CompressedBase64UrlEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/CompressedBase64UrlEncoder.java @@ -6,9 +6,7 @@ public final class CompressedBase64UrlEncoder extends AbstractBase64UrlEncoder { private static final CompressedBase64UrlEncoder instance = new CompressedBase64UrlEncoder(); - private CompressedBase64UrlEncoder() { - - } + private CompressedBase64UrlEncoder() {} public static CompressedBase64UrlEncoder getInstance() { return instance; @@ -17,7 +15,7 @@ public static CompressedBase64UrlEncoder getInstance() { @Override protected void pad(BitString bitString) { int remainder = bitString.length() % 8; - if(remainder > 0) { + if (remainder > 0) { int padding = 8 - remainder; for (int i = 0; i < padding; i++) { bitString.writeBoolean(false); @@ -25,12 +23,11 @@ protected void pad(BitString bitString) { } remainder = bitString.length() % 6; - if(remainder > 0) { + if (remainder > 0) { int padding = 6 - remainder; for (int i = 0; i < padding; i++) { bitString.writeBoolean(false); } } } - } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoder.java index d26e71cf..a234b2b4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoder.java @@ -6,9 +6,7 @@ public final class TraditionalBase64UrlEncoder extends AbstractBase64UrlEncoder private static final TraditionalBase64UrlEncoder instance = new TraditionalBase64UrlEncoder(); - private TraditionalBase64UrlEncoder() { - - } + private TraditionalBase64UrlEncoder() {} public static TraditionalBase64UrlEncoder getInstance() { return instance; @@ -24,5 +22,4 @@ protected void pad(BitString bitString) { } } } - } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java index 8a640c6b..4f3b6b63 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java @@ -1,11 +1,11 @@ package com.iab.gpp.encoder.bitstring; -import java.util.Arrays; import com.iab.gpp.encoder.error.DecodingException; +import java.util.Arrays; // a thin version of java.util.BitSet public final class BitSet { - + private static final byte[] EMPTY = new byte[0]; private static final int ADDRESS_BITS_PER_WORD = 3; private static final int BITS_PER_WORD = 1 << ADDRESS_BITS_PER_WORD; @@ -13,13 +13,13 @@ public final class BitSet { private static final int MODULO = BITS_PER_WORD - 1; private static final int CORRECTION = Integer.SIZE - BITS_PER_WORD; private static final int WORD_MASK = 0xff; - + private byte[] words; public BitSet(byte[] words) { this.words = words; } - + public BitSet(int initialCapacity) { this(new byte[wordIndex(initialCapacity) + 1]); } @@ -54,8 +54,7 @@ private byte[] ensureIndex(int wordIndex) { public boolean get(int bitIndex) { int wordIndex = wordIndex(bitIndex); byte[] words = this.words; - return (wordIndex < words.length) - && (words[wordIndex] & wordMask(bitIndex)) != 0; + return (wordIndex < words.length) && (words[wordIndex] & wordMask(bitIndex)) != 0; } public void clear(int from, int to) { @@ -77,21 +76,21 @@ public int nextSetBit(int fromIndex) { int wordsInUse = words.length; int u = wordIndex(fromIndex); if (u >= wordsInUse) { - return -1; + return -1; } int bit = fromIndex & MODULO; int word = words[u] & (WORD_MASK >>> bit); while (true) { - word &= WORD_MASK; - if (word != 0) { - return (u * BITS_PER_WORD) + Integer.numberOfLeadingZeros(word) - CORRECTION; - } - if (++u == wordsInUse) { - return -1; - } - word = words[u]; + word &= WORD_MASK; + if (word != 0) { + return (u * BITS_PER_WORD) + Integer.numberOfLeadingZeros(word) - CORRECTION; + } + if (++u == wordsInUse) { + return -1; + } + word = words[u]; } } @@ -121,8 +120,7 @@ public boolean set(int bitIndex, boolean value) { } return prior; } - - + public int readInt(int from, int to) { int startWordIndex = wordIndex(from); int startBit = from & MODULO; @@ -131,7 +129,7 @@ public int readInt(int from, int to) { // TODO: is this needed if the caller checks range? byte[] words = ensureIndex(endWordIndex); int out = 0; - for(int wordIndex = startWordIndex; wordIndex <= endWordIndex; wordIndex++) { + for (int wordIndex = startWordIndex; wordIndex <= endWordIndex; wordIndex++) { int word = words[wordIndex] & WORD_MASK; if (wordIndex == startWordIndex) { word &= WORD_MASK >>> startBit; @@ -146,7 +144,7 @@ public int readInt(int from, int to) { } return out; } - + public long readLong(int from, int to) { int startWordIndex = wordIndex(from); int startBit = from & MODULO; @@ -155,7 +153,7 @@ public long readLong(int from, int to) { // TODO: is this needed if the caller checks range? byte[] words = ensureIndex(endWordIndex); long out = 0; - for(int wordIndex = startWordIndex; wordIndex <= endWordIndex; wordIndex++) { + for (int wordIndex = startWordIndex; wordIndex <= endWordIndex; wordIndex++) { long word = words[wordIndex] & WORD_MASK; if (wordIndex == startWordIndex) { word &= (WORD_MASK >>> startBit); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java index 8303dadf..cd56919f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java @@ -20,7 +20,7 @@ public BitString(BitSet bitSet, int length) { this.bitSet = bitSet; this.writeIndex = length; } - + public BitString() { this(new BitSet(), 0); } @@ -73,7 +73,7 @@ public void writeInt(int value, int length) { int mask = 1 << length; if (value >= mask) { throw new EncodingException( - "Numeric value '" + value + "' is too large for a bit string length of '" + length + "'"); + "Numeric value '" + value + "' is too large for a bit string length of '" + length + "'"); } for (int i = 0; i < length; i++) { mask >>= 1; @@ -85,7 +85,7 @@ public void writeLong(long value, int length) { long mask = 1L << length; if (value >= mask) { throw new EncodingException( - "Numeric value '" + value + "' is too large for a bit string length of '" + length + "'"); + "Numeric value '" + value + "' is too large for a bit string length of '" + length + "'"); } for (int i = 0; i < length; i++) { mask >>= 1; @@ -158,7 +158,7 @@ public long readLong(int length) { readIndex = to; return bitSet.readLong(from, to); } - + public boolean readBoolean() { return getValue(readIndex++); } @@ -201,5 +201,4 @@ public FixedIntegerList readFixedIntegerList(int elementLength, int length) { readIndex = newReadIndex; return out; } - } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java index 8b88c1a4..3d0c51b1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java @@ -1,11 +1,12 @@ package com.iab.gpp.encoder.datatype; -import java.util.function.Predicate; import com.iab.gpp.encoder.field.FieldKey; +import java.util.function.Predicate; // This class is used to handle collection types. // It is important that we monitor the collections we return for changes. -public abstract class AbstractDirtyableBitStringDataType & FieldKey, T extends Dirtyable> +public abstract class AbstractDirtyableBitStringDataType< + E extends Enum & FieldKey, T extends Dirtyable> extends AbstractEncodableBitStringDataType { protected AbstractDirtyableBitStringDataType(String name, Predicate validator) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java index 8783843b..1a734630 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java @@ -1,25 +1,28 @@ package com.iab.gpp.encoder.datatype; -import java.util.function.Predicate; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; +import java.util.function.Predicate; -public abstract class AbstractEncodableBitStringDataType & FieldKey, T> extends DataType { +public abstract class AbstractEncodableBitStringDataType & FieldKey, T> + extends DataType { protected AbstractEncodableBitStringDataType(String name, Predicate validator) { super(name, validator); } @Override - public final void encode(BitString writer, Object[] values, int index, EncodableSegment segment) { + public final void encode( + BitString writer, Object[] values, int index, EncodableSegment segment) { encode(writer, get(values, index), segment); } protected abstract void encode(BitString writer, T value, EncodableSegment segment); @Override - public final void decode(BitString reader, Object[] values, int index, EncodableSegment segment) { + public final void decode( + BitString reader, Object[] values, int index, EncodableSegment segment) { values[index] = decode(reader, segment); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java index 3dee0b27..92c6e3d0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java @@ -1,18 +1,18 @@ package com.iab.gpp.encoder.datatype; -import java.util.Collection; -import java.util.function.Predicate; -import java.util.stream.Collectors; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.ValidationException; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; +import java.util.Collection; +import java.util.function.Predicate; +import java.util.stream.Collectors; public abstract class DataType & FieldKey, T> { - + protected final String name; private final Predicate validator; - + protected DataType(String name, Predicate validator) { this.name = name; this.validator = validator; @@ -32,8 +32,11 @@ protected final void validate(T v) { return; } else { if (v instanceof Collection) { - throw new ValidationException("Invalid value '" - + ((Collection) v).stream().map(Object::toString).collect(Collectors.joining(",")) + "'"); + throw new ValidationException( + "Invalid value '" + + ((Collection) v) + .stream().map(Object::toString).collect(Collectors.joining(",")) + + "'"); } else { throw new ValidationException("Invalid value '" + v + "'"); } @@ -65,19 +68,18 @@ public final T get(Object[] values, int index) { } return value; } - + public final void set(Object[] values, int index, Object newValue) { T oldValue = get(values, index); T effectiveValue = processValue(oldValue, newValue); validate(effectiveValue); values[index] = effectiveValue; } - + protected abstract T initialize(); @SuppressWarnings("unchecked") protected T processValue(T oldValue, Object newValue) { return (T) newValue; } - } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/Dirtyable.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/Dirtyable.java index ad15093c..ef4e5495 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/Dirtyable.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/Dirtyable.java @@ -2,5 +2,6 @@ public interface Dirtyable { boolean isDirty(); + void setDirty(boolean dirty); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java index 2b7b53ea..81bccc51 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java @@ -1,17 +1,19 @@ package com.iab.gpp.encoder.datatype; -import java.util.List; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerRangeEncoder; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; +import java.util.List; -public final class EncodableArrayOfFixedIntegerRanges & FieldKey> extends AbstractDirtyableBitStringDataType> { +public final class EncodableArrayOfFixedIntegerRanges & FieldKey> + extends AbstractDirtyableBitStringDataType> { private final int keyBitStringLength; private final int typeBitStringLength; - public EncodableArrayOfFixedIntegerRanges(String name, int keyBitStringLength, int typeBitStringLength) { + public EncodableArrayOfFixedIntegerRanges( + String name, int keyBitStringLength, int typeBitStringLength) { super(name, null); this.keyBitStringLength = keyBitStringLength; this.typeBitStringLength = typeBitStringLength; @@ -28,7 +30,8 @@ protected DirtyableList initialize() { } @Override - protected void encode(BitString sb, DirtyableList entries, EncodableSegment segment) { + protected void encode( + BitString sb, DirtyableList entries, EncodableSegment segment) { sb.writeInt(entries.size(), 12); for (RangeEntry entry : entries) { sb.writeInt(entry.getKey(), keyBitStringLength); @@ -53,7 +56,8 @@ protected DirtyableList decode(BitString reader, EncodableSegment @SuppressWarnings("unchecked") @Override - protected DirtyableList processValue(DirtyableList oldValue, Object newValue) { + protected DirtyableList processValue( + DirtyableList oldValue, Object newValue) { oldValue.clear(); oldValue.addAll((List) newValue); return oldValue; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java index 0a21bc52..0969538a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java @@ -4,7 +4,8 @@ import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; -public final class EncodableBoolean & FieldKey> extends AbstractEncodableBitStringDataType { +public final class EncodableBoolean & FieldKey> + extends AbstractEncodableBitStringDataType { private final Boolean initial; @@ -19,7 +20,7 @@ protected Boolean initialize() { } @Override - protected void encode(BitString builder, Boolean value, EncodableSegment segment){ + protected void encode(BitString builder, Boolean value, EncodableSegment segment) { builder.writeBoolean(value); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java index 837598d7..f9333f57 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java @@ -1,12 +1,13 @@ package com.iab.gpp.encoder.datatype; -import java.time.Instant; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.DatetimeEncoder; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; +import java.time.Instant; -public final class EncodableDatetime & FieldKey> extends AbstractEncodableBitStringDataType { +public final class EncodableDatetime & FieldKey> + extends AbstractEncodableBitStringDataType { public EncodableDatetime(String name) { super(name, null); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java index 45972234..3ada0870 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java @@ -4,7 +4,8 @@ import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; -public final class EncodableFibonacciInteger & FieldKey> extends AbstractEncodableBitStringDataType { +public final class EncodableFibonacciInteger & FieldKey> + extends AbstractEncodableBitStringDataType { private final Integer initial; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java index b0adc05f..c1d0ba79 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java @@ -1,12 +1,13 @@ package com.iab.gpp.encoder.datatype; -import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FibonacciIntegerRangeEncoder; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; +import java.util.Collection; -public final class EncodableFibonacciIntegerRange & FieldKey> extends AbstractDirtyableBitStringDataType { +public final class EncodableFibonacciIntegerRange & FieldKey> + extends AbstractDirtyableBitStringDataType { public EncodableFibonacciIntegerRange(String name) { super(name, null); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java index e123bb19..ffb2dda9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java @@ -1,12 +1,13 @@ package com.iab.gpp.encoder.datatype; -import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedBitfieldEncoder; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; +import java.util.Collection; -public final class EncodableFixedBitfield & FieldKey> extends AbstractDirtyableBitStringDataType { +public final class EncodableFixedBitfield & FieldKey> + extends AbstractDirtyableBitStringDataType { private final int numElements; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java index ba726136..6d6fc90d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java @@ -1,25 +1,27 @@ package com.iab.gpp.encoder.datatype; -import java.util.function.Predicate; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; +import java.util.function.Predicate; -public final class EncodableFixedInteger & FieldKey> extends AbstractEncodableBitStringDataType { +public final class EncodableFixedInteger & FieldKey> + extends AbstractEncodableBitStringDataType { private final int bitStringLength; private final Integer initial; - - public EncodableFixedInteger(String name, int bitStringLength, Integer initial, Predicate validator) { + + public EncodableFixedInteger( + String name, int bitStringLength, Integer initial, Predicate validator) { super(name, validator); this.bitStringLength = bitStringLength; this.initial = initial; } - + public EncodableFixedInteger(String name, int bitStringLength, Integer initial) { this(name, bitStringLength, initial, null); } - + @Override public String toString() { return name + "=Int(" + bitStringLength + ")"; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java index cfad7f65..57d05985 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java @@ -1,18 +1,23 @@ package com.iab.gpp.encoder.datatype; -import java.util.List; -import java.util.function.Predicate; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerListEncoder; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; +import java.util.List; +import java.util.function.Predicate; -public final class EncodableFixedIntegerList & FieldKey> extends AbstractDirtyableBitStringDataType { +public final class EncodableFixedIntegerList & FieldKey> + extends AbstractDirtyableBitStringDataType { private final int elementBitStringLength; private final int numElements; - public EncodableFixedIntegerList(String name, int elementBitStringLength, int numElements, Predicate validator) { + public EncodableFixedIntegerList( + String name, + int elementBitStringLength, + int numElements, + Predicate validator) { super(name, validator); this.elementBitStringLength = elementBitStringLength; this.numElements = numElements; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java index b3d3293d..ec844895 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java @@ -1,12 +1,13 @@ package com.iab.gpp.encoder.datatype; -import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerRangeEncoder; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; +import java.util.Collection; -public final class EncodableFixedIntegerRange & FieldKey> extends AbstractDirtyableBitStringDataType { +public final class EncodableFixedIntegerRange & FieldKey> + extends AbstractDirtyableBitStringDataType { public EncodableFixedIntegerRange(String name) { super(name, null); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java index ddf6b3f5..82b4b56c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java @@ -5,7 +5,8 @@ import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; -public final class EncodableFixedString & FieldKey> extends AbstractEncodableBitStringDataType { +public final class EncodableFixedString & FieldKey> + extends AbstractEncodableBitStringDataType { private final int stringLength; private final String initial; @@ -15,7 +16,7 @@ public EncodableFixedString(String name, int stringLength, String initial) { this.stringLength = stringLength; this.initial = initial; } - + @Override public String toString() { return name + "=String(" + stringLength + ")"; @@ -25,7 +26,7 @@ public String toString() { protected String initialize() { return initial; } - + @Override protected void encode(BitString builder, String value, EncodableSegment segment) { FixedStringEncoder.encode(builder, value, this.stringLength); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java index 7d46c137..88b7118b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java @@ -1,13 +1,14 @@ package com.iab.gpp.encoder.datatype; -import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedBitfieldEncoder; import com.iab.gpp.encoder.field.FieldKey; -import com.iab.gpp.encoder.segment.SegmentValueProvider; import com.iab.gpp.encoder.segment.EncodableSegment; +import com.iab.gpp.encoder.segment.SegmentValueProvider; +import java.util.Collection; -public final class EncodableFlexibleBitfield & FieldKey> extends AbstractDirtyableBitStringDataType { +public final class EncodableFlexibleBitfield & FieldKey> + extends AbstractDirtyableBitStringDataType { private final SegmentValueProvider getLengthSupplier; @@ -31,7 +32,6 @@ protected IntegerSet decode(BitString reader, EncodableSegment segment) { return reader.readIntegerSet(getLengthSupplier.extract(segment)); } - @SuppressWarnings("unchecked") @Override protected IntegerSet processValue(IntegerSet oldValue, Object newValue) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java index 5ff248fa..90a3ed92 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java @@ -1,13 +1,13 @@ package com.iab.gpp.encoder.datatype; -import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.OptimizedFixedRangeEncoder; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; +import java.util.Collection; - -public final class EncodableOptimizedFixedRange & FieldKey> extends AbstractDirtyableBitStringDataType { +public final class EncodableOptimizedFixedRange & FieldKey> + extends AbstractDirtyableBitStringDataType { public EncodableOptimizedFixedRange(String name) { super(name, null); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java index a6abb932..36486cb1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java @@ -1,11 +1,11 @@ package com.iab.gpp.encoder.datatype; -import java.util.AbstractList; import com.iab.gpp.encoder.bitstring.BitSet; +import java.util.AbstractList; /** - * An optimized implementation of {@literal List} of fixed size. - * Use {@link #getInt(int)} and {@link #setInt(int, int)} for efficient access. + * An optimized implementation of {@literal List} of fixed size. Use {@link #getInt(int)} + * and {@link #setInt(int, int)} for efficient access. */ public final class FixedIntegerList extends AbstractList implements Dirtyable { @@ -21,7 +21,7 @@ public FixedIntegerList(BitSet bitSet, int offset, int elementBitStringLength, i this.elementBitStringLength = elementBitStringLength; this.numElements = numElements; } - + public FixedIntegerList(int elementBitStringLength, int numElements) { this(new BitSet(elementBitStringLength * numElements), 0, elementBitStringLength, numElements); } @@ -61,7 +61,11 @@ public int setInt(int index, int value) { int mask = 1 << length; if (value < 0 || value >= mask) { throw new IllegalArgumentException( - "Numeric value '" + value + "' is too large for a bit string length of '" + elementBitStringLength + "'"); + "Numeric value '" + + value + + "' is too large for a bit string length of '" + + elementBitStringLength + + "'"); } int from = offset + index * length; int to = from + length; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/IntegerCache.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/IntegerCache.java index fb7027ca..79b9aa8b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/IntegerCache.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/IntegerCache.java @@ -4,7 +4,9 @@ final class IntegerCache { private IntegerCache() {} + private static final Integer[] CACHE = new Integer[MAX_COLLECTION_SIZE]; + static { for (int i = 0; i < MAX_COLLECTION_SIZE; i++) { CACHE[i] = i; @@ -12,10 +14,9 @@ private IntegerCache() {} } static Integer valueOf(int i) { - if (i >=0 && i < MAX_COLLECTION_SIZE) { + if (i >= 0 && i < MAX_COLLECTION_SIZE) { return CACHE[i]; } return i; } - } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/IntegerSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/IntegerSet.java index d18667cf..32341097 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/IntegerSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/IntegerSet.java @@ -1,19 +1,20 @@ package com.iab.gpp.encoder.datatype; +import com.iab.gpp.encoder.bitstring.BitSet; import java.util.AbstractSet; import java.util.Collection; import java.util.NoSuchElementException; +import java.util.PrimitiveIterator.OfInt; import java.util.Spliterator; import java.util.Spliterators; -import java.util.PrimitiveIterator.OfInt; import java.util.logging.Logger; import java.util.stream.IntStream; import java.util.stream.StreamSupport; -import com.iab.gpp.encoder.bitstring.BitSet; /** - * An optimized implementation of {@literal Set} backed by a {@link java.util.BitSet}. - * Use {@link #containsInt(int)}, {@link #addInt(int)}, and {@link #removeInt(int)} for efficient access. + * An optimized implementation of {@literal Set} backed by a {@link java.util.BitSet}. Use + * {@link #containsInt(int)}, {@link #addInt(int)}, and {@link #removeInt(int)} for efficient + * access. */ public final class IntegerSet extends AbstractSet implements Dirtyable { private static final Logger LOGGER = Logger.getLogger(IntegerSet.class.getName()); @@ -53,7 +54,7 @@ public int size() { } private int getOffset(int value) { - int offset = from - adjustment + value; + int offset = from - adjustment + value; if (offset < from) { throw new IndexOutOfBoundsException("Negative index provided"); } @@ -104,7 +105,7 @@ public int nextInt() { } @Override - public Spliterator.OfInt spliterator(){ + public Spliterator.OfInt spliterator() { return Spliterators.spliteratorUnknownSize( iterator(), Spliterator.ORDERED | Spliterator.DISTINCT | Spliterator.IMMUTABLE | Spliterator.NONNULL); @@ -115,7 +116,7 @@ public IntStream intStream() { } private static final void logOutOfRange(int value) { - LOGGER.warning("Exceeding IntegerBitSet.MAX_COLLECTION_SIZE: "+ value); + LOGGER.warning("Exceeding IntegerBitSet.MAX_COLLECTION_SIZE: " + value); } public void addRange(int start, int end) { @@ -215,4 +216,4 @@ public boolean isDirty() { public void setDirty(boolean dirty) { this.dirty = dirty; } -} \ No newline at end of file +} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java index 5f0aa0b0..c30f40f5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java @@ -62,5 +62,4 @@ public void setDirty(boolean dirty) { this.dirty = dirty; ids.setDirty(dirty); } - } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java index d506ba2f..62d3af2f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java @@ -4,7 +4,8 @@ import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; -public final class UnencodableBoolean & FieldKey> extends AbstractEncodableBitStringDataType { +public final class UnencodableBoolean & FieldKey> + extends AbstractEncodableBitStringDataType { private final Boolean initial; @@ -12,7 +13,7 @@ public UnencodableBoolean(String name, Boolean initial) { super(name, null); this.initial = initial; } - + @Override protected Boolean initialize() { return initial; @@ -27,5 +28,4 @@ protected void encode(BitString writer, Boolean value, EncodableSegment segme protected Boolean decode(BitString reader, EncodableSegment segment) { return Boolean.FALSE; } - } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableCharacter.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableCharacter.java index 13dbb8ca..d0379fc6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableCharacter.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableCharacter.java @@ -1,12 +1,13 @@ package com.iab.gpp.encoder.datatype; -import java.util.function.Predicate; import com.iab.gpp.encoder.field.FieldKey; +import java.util.function.Predicate; -public final class UnencodableCharacter & FieldKey> extends DataType { +public final class UnencodableCharacter & FieldKey> + extends DataType { private final Character initial; - + public UnencodableCharacter(String name, Character initial, Predicate validator) { super(name, validator); this.initial = initial; @@ -16,5 +17,4 @@ public UnencodableCharacter(String name, Character initial, Predicate protected Character initialize() { return initial; } - } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableInteger.java index efb65924..ac863667 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableInteger.java @@ -5,7 +5,7 @@ public final class UnencodableInteger & FieldKey> extends DataType { private final Integer initial; - + public UnencodableInteger(String name, Integer initial) { super(name, null); this.initial = initial; @@ -15,5 +15,4 @@ public UnencodableInteger(String name, Integer initial) { protected Integer initialize() { return initial; } - } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java index b8a741b8..243aebbe 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java @@ -1,8 +1,8 @@ package com.iab.gpp.encoder.datatype.encoder; -import java.time.Instant; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; +import java.time.Instant; public class DatetimeEncoder { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java index d83c35f9..f333c1c2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java @@ -7,6 +7,7 @@ private FibonacciIntegerEncoder() {} // which does not overflow a 32-bit integer public static final int FIBONACCI_LIMIT = 42; public static final int[] FIBONACCI_NUMBERS = new int[FIBONACCI_LIMIT]; + static { for (int i = 0; i < FIBONACCI_LIMIT; i++) { if (i == 0) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java index 02d993a9..d1888cae 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java @@ -1,9 +1,9 @@ package com.iab.gpp.encoder.datatype.encoder; -import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; +import java.util.Collection; public class FibonacciIntegerRangeEncoder { private FibonacciIntegerRangeEncoder() {} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java index cfdc431c..bb886ed6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java @@ -1,13 +1,14 @@ package com.iab.gpp.encoder.datatype.encoder; -import java.util.List; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.EncodingException; +import java.util.List; public class FixedIntegerListEncoder { private FixedIntegerListEncoder() {} - public static void encode(BitString builder, List value, int elementBitStringLength, int numElements) { + public static void encode( + BitString builder, List value, int elementBitStringLength, int numElements) { int length = value.size(); if (length > numElements) { throw new EncodingException("Too many values '" + value.size() + "'"); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java index 11ea840e..85432eca 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java @@ -1,9 +1,9 @@ package com.iab.gpp.encoder.datatype.encoder; -import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; +import java.util.Collection; public class FixedIntegerRangeEncoder { private FixedIntegerRangeEncoder() {} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java index 39fd4001..ea2d970c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java @@ -5,6 +5,7 @@ public class FixedStringEncoder { private FixedStringEncoder() {} + private static final char SPACE = ' '; public static void encode(BitString builder, String value, int stringLength) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java index a56603f6..291be775 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java @@ -1,22 +1,23 @@ package com.iab.gpp.encoder.field; -import java.util.function.Predicate; import com.iab.gpp.encoder.datatype.DataType; import com.iab.gpp.encoder.datatype.FixedIntegerList; +import java.util.function.Predicate; public interface FieldKey { DataType getType(); public static final Predicate VALIDATOR_012 = (n -> n >= 0 && n <= 2); public static final Predicate VALIDATOR_12 = (n -> n >= 1 && n <= 2); - public static final Predicate VALIDATOR_LIST_012 = (l -> { - int size = l.size(); - for (int i = 0; i < size; i++) { - int n = l.getInt(i); - if (n < 0 || n > 2) { - return false; - } - } - return true; - }); + public static final Predicate VALIDATOR_LIST_012 = + (l -> { + int size = l.size(); + for (int i = 0; i < size; i++) { + int n = l.getInt(i); + if (n < 0 || n > 2) { + return false; + } + } + return true; + }); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java index bf44d148..249c411d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java @@ -1,14 +1,14 @@ package com.iab.gpp.encoder.field; +import com.iab.gpp.encoder.datatype.DataType; import java.util.Arrays; import java.util.LinkedHashMap; -import com.iab.gpp.encoder.datatype.DataType; public final class FieldNames & FieldKey> { private final LinkedHashMap map; private final Integer[] indices; - private final DataType[] types; + private final DataType[] types; @SafeVarargs FieldNames(E... keys) { @@ -22,7 +22,7 @@ public final class FieldNames & FieldKey> { this.types[i] = key.getType(); } } - + public int size() { return types.length; } @@ -31,7 +31,7 @@ public int size() { public DataType get(int i) { return (DataType) types[i]; } - + public Integer getIndex(E key) { if (key == null) { return null; @@ -47,5 +47,4 @@ public E resolveKey(FieldKey key) { public String toString() { return Arrays.toString(types); } - } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java index 957263c5..65ecd219 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java @@ -21,13 +21,9 @@ public enum HeaderV1Field implements FieldKey { return type; } - //@formatter:off - public static final FieldNames HEADER_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( - HeaderV1Field.ID, - HeaderV1Field.VERSION, - HeaderV1Field.SECTION_IDS - ); - //@formatter:on - + // @formatter:off + public static final FieldNames HEADER_CORE_SEGMENT_FIELD_NAMES = + new FieldNames<>(HeaderV1Field.ID, HeaderV1Field.VERSION, HeaderV1Field.SECTION_IDS); + // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java index 7df97035..8773a0bd 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java @@ -33,8 +33,12 @@ public enum TcfCaV1Field implements FieldKey { PUB_PURPOSES_EXPRESS_CONSENT(new EncodableFixedBitfield<>("PubPurposesExpressConsent", 24)), PUB_PURPOSES_IMPLIED_CONSENT(new EncodableFixedBitfield<>("PubPurposesImpliedConsent", 24)), NUM_CUSTOM_PURPOSES(new EncodableFixedInteger<>("NumCustomPurposes", 6, 0)), - CUSTOM_PURPOSES_EXPRESS_CONSENT(new EncodableFlexibleBitfield<>("CustomPurposesExpressConsent", TcfCaV1Field.NUM_CUSTOM_PURPOSES)), - CUSTOM_PURPOSES_IMPLIED_CONSENT(new EncodableFlexibleBitfield<>("CustomPurposesImpliedConsent", TcfCaV1Field.NUM_CUSTOM_PURPOSES)), + CUSTOM_PURPOSES_EXPRESS_CONSENT( + new EncodableFlexibleBitfield<>( + "CustomPurposesExpressConsent", TcfCaV1Field.NUM_CUSTOM_PURPOSES)), + CUSTOM_PURPOSES_IMPLIED_CONSENT( + new EncodableFlexibleBitfield<>( + "CustomPurposesImpliedConsent", TcfCaV1Field.NUM_CUSTOM_PURPOSES)), DISCLOSED_VENDORS_SEGMENT_TYPE(new EncodableFixedInteger<>("DisclosedVendorsSegmentType", 3, 1)), DISCLOSED_VENDORS(new EncodableOptimizedFixedRange<>("DisclosedVendors")); @@ -49,42 +53,41 @@ public enum TcfCaV1Field implements FieldKey { public DataType getType() { return type; } - //@formatter:off - public static final FieldNames TCFCAV1_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( - TcfCaV1Field.VERSION, - TcfCaV1Field.CREATED, - TcfCaV1Field.LAST_UPDATED, - TcfCaV1Field.CMP_ID, - TcfCaV1Field.CMP_VERSION, - TcfCaV1Field.CONSENT_SCREEN, - TcfCaV1Field.CONSENT_LANGUAGE, - TcfCaV1Field.VENDOR_LIST_VERSION, - TcfCaV1Field.TCF_POLICY_VERSION, - TcfCaV1Field.USE_NON_STANDARD_STACKS, - TcfCaV1Field.SPECIAL_FEATURE_EXPRESS_CONSENT, - TcfCaV1Field.PURPOSES_EXPRESS_CONSENT, - TcfCaV1Field.PURPOSES_IMPLIED_CONSENT, - TcfCaV1Field.VENDOR_EXPRESS_CONSENT, - TcfCaV1Field.VENDOR_IMPLIED_CONSENT, - TcfCaV1Field.PUB_RESTRICTIONS - ); - //@formatter:on - //@formatter:off - public static final FieldNames TCFCAV1_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES = new FieldNames<>( - TcfCaV1Field.PUB_PURPOSES_SEGMENT_TYPE, - TcfCaV1Field.PUB_PURPOSES_EXPRESS_CONSENT, - TcfCaV1Field.PUB_PURPOSES_IMPLIED_CONSENT, - TcfCaV1Field.NUM_CUSTOM_PURPOSES, - TcfCaV1Field.CUSTOM_PURPOSES_EXPRESS_CONSENT, - TcfCaV1Field.CUSTOM_PURPOSES_IMPLIED_CONSENT - ); - //@formatter:on + // @formatter:off + public static final FieldNames TCFCAV1_CORE_SEGMENT_FIELD_NAMES = + new FieldNames<>( + TcfCaV1Field.VERSION, + TcfCaV1Field.CREATED, + TcfCaV1Field.LAST_UPDATED, + TcfCaV1Field.CMP_ID, + TcfCaV1Field.CMP_VERSION, + TcfCaV1Field.CONSENT_SCREEN, + TcfCaV1Field.CONSENT_LANGUAGE, + TcfCaV1Field.VENDOR_LIST_VERSION, + TcfCaV1Field.TCF_POLICY_VERSION, + TcfCaV1Field.USE_NON_STANDARD_STACKS, + TcfCaV1Field.SPECIAL_FEATURE_EXPRESS_CONSENT, + TcfCaV1Field.PURPOSES_EXPRESS_CONSENT, + TcfCaV1Field.PURPOSES_IMPLIED_CONSENT, + TcfCaV1Field.VENDOR_EXPRESS_CONSENT, + TcfCaV1Field.VENDOR_IMPLIED_CONSENT, + TcfCaV1Field.PUB_RESTRICTIONS); + // @formatter:on - //@formatter:off - public static final FieldNames TCFCAV1_DISCLOSED_VENDORS_SEGMENT_FIELD_NAMES = new FieldNames<>( - TcfCaV1Field.DISCLOSED_VENDORS_SEGMENT_TYPE, - TcfCaV1Field.DISCLOSED_VENDORS - ); - //@formatter:on + // @formatter:off + public static final FieldNames TCFCAV1_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES = + new FieldNames<>( + TcfCaV1Field.PUB_PURPOSES_SEGMENT_TYPE, + TcfCaV1Field.PUB_PURPOSES_EXPRESS_CONSENT, + TcfCaV1Field.PUB_PURPOSES_IMPLIED_CONSENT, + TcfCaV1Field.NUM_CUSTOM_PURPOSES, + TcfCaV1Field.CUSTOM_PURPOSES_EXPRESS_CONSENT, + TcfCaV1Field.CUSTOM_PURPOSES_IMPLIED_CONSENT); + // @formatter:on + + // @formatter:off + public static final FieldNames TCFCAV1_DISCLOSED_VENDORS_SEGMENT_FIELD_NAMES = + new FieldNames<>(TcfCaV1Field.DISCLOSED_VENDORS_SEGMENT_TYPE, TcfCaV1Field.DISCLOSED_VENDORS); + // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java index 8a1ebddf..1218117f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java @@ -31,12 +31,16 @@ public enum TcfEuV2Field implements FieldKey { VENDOR_CONSENTS(new EncodableOptimizedFixedRange<>("VendorConsents")), VENDOR_LEGITIMATE_INTERESTS(new EncodableOptimizedFixedRange<>("VendorLegitimateInterests")), PUBLISHER_RESTRICTIONS(new EncodableArrayOfFixedIntegerRanges<>("PublisherRestrictions", 6, 2)), - PUBLISHER_PURPOSES_SEGMENT_TYPE(new EncodableFixedInteger<>("PublisherPurposesSegmentType", 3, 3)), + PUBLISHER_PURPOSES_SEGMENT_TYPE( + new EncodableFixedInteger<>("PublisherPurposesSegmentType", 3, 3)), PUBLISHER_CONSENTS(new EncodableFixedBitfield<>("PublisherConsents", 24)), PUBLISHER_LEGITIMATE_INTERESTS(new EncodableFixedBitfield<>("PublisherLegitimateInterests", 24)), NUM_CUSTOM_PURPOSES(new EncodableFixedInteger<>("NumCustomPurposes", 6, 0)), - PUBLISHER_CUSTOM_CONSENTS(new EncodableFlexibleBitfield<>("PublisherCustomConsents", TcfEuV2Field.NUM_CUSTOM_PURPOSES)), - PUBLISHER_CUSTOM_LEGITIMATE_INTERESTS(new EncodableFlexibleBitfield<>("PublisherCustomLegitimateInterests", TcfEuV2Field.NUM_CUSTOM_PURPOSES)), + PUBLISHER_CUSTOM_CONSENTS( + new EncodableFlexibleBitfield<>("PublisherCustomConsents", TcfEuV2Field.NUM_CUSTOM_PURPOSES)), + PUBLISHER_CUSTOM_LEGITIMATE_INTERESTS( + new EncodableFlexibleBitfield<>( + "PublisherCustomLegitimateInterests", TcfEuV2Field.NUM_CUSTOM_PURPOSES)), VENDORS_ALLOWED_SEGMENT_TYPE(new EncodableFixedInteger<>("VendorsAllowedSegmentType", 3, 2)), VENDORS_ALLOWED(new EncodableOptimizedFixedRange<>("VendorsAllowed")), VENDORS_DISCLOSED_SEGMENT_TYPE(new EncodableFixedInteger<>("VendorsDisclosedSegmentType", 3, 1)), @@ -53,52 +57,48 @@ public enum TcfEuV2Field implements FieldKey { return type; } - //@formatter:off - public static final FieldNames TCFEUV2_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( - TcfEuV2Field.VERSION, - TcfEuV2Field.CREATED, - TcfEuV2Field.LAST_UPDATED, - TcfEuV2Field.CMP_ID, - TcfEuV2Field.CMP_VERSION, - TcfEuV2Field.CONSENT_SCREEN, - TcfEuV2Field.CONSENT_LANGUAGE, - TcfEuV2Field.VENDOR_LIST_VERSION, - TcfEuV2Field.POLICY_VERSION, - TcfEuV2Field.IS_SERVICE_SPECIFIC, - TcfEuV2Field.USE_NON_STANDARD_STACKS, - TcfEuV2Field.SPECIAL_FEATURE_OPTINS, - TcfEuV2Field.PURPOSE_CONSENTS, - TcfEuV2Field.PURPOSE_LEGITIMATE_INTERESTS, - TcfEuV2Field.PURPOSE_ONE_TREATMENT, - TcfEuV2Field.PUBLISHER_COUNTRY_CODE, - TcfEuV2Field.VENDOR_CONSENTS, - TcfEuV2Field.VENDOR_LEGITIMATE_INTERESTS, - TcfEuV2Field.PUBLISHER_RESTRICTIONS - ); - //@formatter:on + // @formatter:off + public static final FieldNames TCFEUV2_CORE_SEGMENT_FIELD_NAMES = + new FieldNames<>( + TcfEuV2Field.VERSION, + TcfEuV2Field.CREATED, + TcfEuV2Field.LAST_UPDATED, + TcfEuV2Field.CMP_ID, + TcfEuV2Field.CMP_VERSION, + TcfEuV2Field.CONSENT_SCREEN, + TcfEuV2Field.CONSENT_LANGUAGE, + TcfEuV2Field.VENDOR_LIST_VERSION, + TcfEuV2Field.POLICY_VERSION, + TcfEuV2Field.IS_SERVICE_SPECIFIC, + TcfEuV2Field.USE_NON_STANDARD_STACKS, + TcfEuV2Field.SPECIAL_FEATURE_OPTINS, + TcfEuV2Field.PURPOSE_CONSENTS, + TcfEuV2Field.PURPOSE_LEGITIMATE_INTERESTS, + TcfEuV2Field.PURPOSE_ONE_TREATMENT, + TcfEuV2Field.PUBLISHER_COUNTRY_CODE, + TcfEuV2Field.VENDOR_CONSENTS, + TcfEuV2Field.VENDOR_LEGITIMATE_INTERESTS, + TcfEuV2Field.PUBLISHER_RESTRICTIONS); + // @formatter:on - //@formatter:off - public static final FieldNames TCFEUV2_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES = new FieldNames<>( - TcfEuV2Field.PUBLISHER_PURPOSES_SEGMENT_TYPE, - TcfEuV2Field.PUBLISHER_CONSENTS, - TcfEuV2Field.PUBLISHER_LEGITIMATE_INTERESTS, - TcfEuV2Field.NUM_CUSTOM_PURPOSES, - TcfEuV2Field.PUBLISHER_CUSTOM_CONSENTS, - TcfEuV2Field.PUBLISHER_CUSTOM_LEGITIMATE_INTERESTS - ); - //@formatter:on + // @formatter:off + public static final FieldNames TCFEUV2_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES = + new FieldNames<>( + TcfEuV2Field.PUBLISHER_PURPOSES_SEGMENT_TYPE, + TcfEuV2Field.PUBLISHER_CONSENTS, + TcfEuV2Field.PUBLISHER_LEGITIMATE_INTERESTS, + TcfEuV2Field.NUM_CUSTOM_PURPOSES, + TcfEuV2Field.PUBLISHER_CUSTOM_CONSENTS, + TcfEuV2Field.PUBLISHER_CUSTOM_LEGITIMATE_INTERESTS); + // @formatter:on - //@formatter:off - public static final FieldNames TCFEUV2_VENDORS_ALLOWED_SEGMENT_FIELD_NAMES = new FieldNames<>( - TcfEuV2Field.VENDORS_ALLOWED_SEGMENT_TYPE, - TcfEuV2Field.VENDORS_ALLOWED - ); - //@formatter:on + // @formatter:off + public static final FieldNames TCFEUV2_VENDORS_ALLOWED_SEGMENT_FIELD_NAMES = + new FieldNames<>(TcfEuV2Field.VENDORS_ALLOWED_SEGMENT_TYPE, TcfEuV2Field.VENDORS_ALLOWED); + // @formatter:on - //@formatter:off - public static final FieldNames TCFEUV2_VENDORS_DISCLOSED_SEGMENT_FIELD_NAMES = new FieldNames<>( - TcfEuV2Field.VENDORS_DISCLOSED_SEGMENT_TYPE, - TcfEuV2Field.VENDORS_DISCLOSED - ); - //@formatter:on + // @formatter:off + public static final FieldNames TCFEUV2_VENDORS_DISCLOSED_SEGMENT_FIELD_NAMES = + new FieldNames<>(TcfEuV2Field.VENDORS_DISCLOSED_SEGMENT_TYPE, TcfEuV2Field.VENDORS_DISCLOSED); + // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java index 3df1a52e..af7f1e41 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java @@ -9,27 +9,23 @@ public enum UsCaField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsCa.VERSION)), - SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), - SHARING_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SharingOptOutNotice", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT_NOTICE(new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), + SHARING_OPT_OUT_NOTICE(new EncodableFixedInteger<>("SharingOptOutNotice", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_LIMIT_USE_NOTICE( new EncodableFixedInteger<>("SensitiveDataLimitUseNotice", 2, 0, VALIDATOR_012)), - SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), - SHARING_OPT_OUT( - new EncodableFixedInteger<>("SharingOptOut", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT(new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), + SHARING_OPT_OUT(new EncodableFixedInteger<>("SharingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 9, VALIDATOR_LIST_012)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 2, VALIDATOR_LIST_012)), - PERSONAL_DATA_CONSENTS( - new EncodableFixedInteger<>("PersonalDataConsents",2, 0, VALIDATOR_012)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS( + new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 2, VALIDATOR_LIST_012)), + PERSONAL_DATA_CONSENTS(new EncodableFixedInteger<>("PersonalDataConsents", 2, 0, VALIDATOR_012)), MSPA_COVERED_TRANSACTION( - new EncodableFixedInteger<>("MspaCoveredTransaction",2, 1, VALIDATOR_12)), + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, VALIDATOR_12)), MSPA_OPT_OUT_OPTION_MODE( - new EncodableFixedInteger<>("MspaOptOutOptionMode",2, 0, VALIDATOR_012)), + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, VALIDATOR_012)), MSPA_SERVICE_PROVIDER_MODE( - new EncodableFixedInteger<>("MspaServiceProviderMode",2, 0, VALIDATOR_012)), + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, VALIDATOR_012)), GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), @@ -46,28 +42,25 @@ public enum UsCaField implements FieldKey { return type; } - //@formatter:off - public static final FieldNames USCA_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsCaField.VERSION, - UsCaField.SALE_OPT_OUT_NOTICE, - UsCaField.SHARING_OPT_OUT_NOTICE, - UsCaField.SENSITIVE_DATA_LIMIT_USE_NOTICE, - UsCaField.SALE_OPT_OUT, - UsCaField.SHARING_OPT_OUT, - UsCaField.SENSITIVE_DATA_PROCESSING, - UsCaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - UsCaField.PERSONAL_DATA_CONSENTS, - UsCaField.MSPA_COVERED_TRANSACTION, - UsCaField.MSPA_OPT_OUT_OPTION_MODE, - UsCaField.MSPA_SERVICE_PROVIDER_MODE - ); - //@formatter:on + // @formatter:off + public static final FieldNames USCA_CORE_SEGMENT_FIELD_NAMES = + new FieldNames<>( + UsCaField.VERSION, + UsCaField.SALE_OPT_OUT_NOTICE, + UsCaField.SHARING_OPT_OUT_NOTICE, + UsCaField.SENSITIVE_DATA_LIMIT_USE_NOTICE, + UsCaField.SALE_OPT_OUT, + UsCaField.SHARING_OPT_OUT, + UsCaField.SENSITIVE_DATA_PROCESSING, + UsCaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + UsCaField.PERSONAL_DATA_CONSENTS, + UsCaField.MSPA_COVERED_TRANSACTION, + UsCaField.MSPA_OPT_OUT_OPTION_MODE, + UsCaField.MSPA_SERVICE_PROVIDER_MODE); + // @formatter:on - //@formatter:off - public static final FieldNames USCA_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsCaField.GPC_SEGMENT_TYPE, - UsCaField.GPC_SEGMENT_INCLUDED, - UsCaField.GPC - ); - //@formatter:on + // @formatter:off + public static final FieldNames USCA_GPC_SEGMENT_FIELD_NAMES = + new FieldNames<>(UsCaField.GPC_SEGMENT_TYPE, UsCaField.GPC_SEGMENT_INCLUDED, UsCaField.GPC); + // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java index eb27198d..bb796d6f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java @@ -9,17 +9,15 @@ public enum UsCoField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsCo.VERSION)), - SHARING_NOTICE( - new EncodableFixedInteger<>("SharingNotice", 2, 0, VALIDATOR_012)), - SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), + SHARING_NOTICE(new EncodableFixedInteger<>("SharingNotice", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT_NOTICE(new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), - SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT(new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), - SENSITIVE_DATA_PROCESSING(new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 7, VALIDATOR_LIST_012)), + SENSITIVE_DATA_PROCESSING( + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 7, VALIDATOR_LIST_012)), KNOWN_CHILD_SENSITIVE_DATA_CONSENTS( new EncodableFixedInteger<>("KnownChildSensitiveDataConsents", 2, 0, VALIDATOR_012)), MSPA_COVERED_TRANSACTION( @@ -44,27 +42,24 @@ public enum UsCoField implements FieldKey { return type; } - //@formatter:off - public static final FieldNames USCO_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsCoField.VERSION, - UsCoField.SHARING_NOTICE, - UsCoField.SALE_OPT_OUT_NOTICE, - UsCoField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - UsCoField.SALE_OPT_OUT, - UsCoField.TARGETED_ADVERTISING_OPT_OUT, - UsCoField.SENSITIVE_DATA_PROCESSING, - UsCoField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - UsCoField.MSPA_COVERED_TRANSACTION, - UsCoField.MSPA_OPT_OUT_OPTION_MODE, - UsCoField.MSPA_SERVICE_PROVIDER_MODE - ); - //@formatter:on + // @formatter:off + public static final FieldNames USCO_CORE_SEGMENT_FIELD_NAMES = + new FieldNames<>( + UsCoField.VERSION, + UsCoField.SHARING_NOTICE, + UsCoField.SALE_OPT_OUT_NOTICE, + UsCoField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + UsCoField.SALE_OPT_OUT, + UsCoField.TARGETED_ADVERTISING_OPT_OUT, + UsCoField.SENSITIVE_DATA_PROCESSING, + UsCoField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + UsCoField.MSPA_COVERED_TRANSACTION, + UsCoField.MSPA_OPT_OUT_OPTION_MODE, + UsCoField.MSPA_SERVICE_PROVIDER_MODE); + // @formatter:on - //@formatter:off - public static final FieldNames USCO_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsCoField.GPC_SEGMENT_TYPE, - UsCoField.GPC_SEGMENT_INCLUDED, - UsCoField.GPC - ); - //@formatter:on + // @formatter:off + public static final FieldNames USCO_GPC_SEGMENT_FIELD_NAMES = + new FieldNames<>(UsCoField.GPC_SEGMENT_TYPE, UsCoField.GPC_SEGMENT_INCLUDED, UsCoField.GPC); + // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java index bd06a729..58fbdbae 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java @@ -9,19 +9,17 @@ public enum UsCtField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsCt.VERSION)), - SHARING_NOTICE( - new EncodableFixedInteger<>("SharingNotice", 2, 0, VALIDATOR_012)), - SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), + SHARING_NOTICE(new EncodableFixedInteger<>("SharingNotice", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT_NOTICE(new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice",2, 0, VALIDATOR_012)), - SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT(new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, VALIDATOR_LIST_012)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, VALIDATOR_LIST_012)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS( + new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, VALIDATOR_LIST_012)), MSPA_COVERED_TRANSACTION( new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, VALIDATOR_12)), MSPA_OPT_OUT_OPTION_MODE( @@ -44,27 +42,24 @@ public enum UsCtField implements FieldKey { return type; } - //@formatter:off - public static final FieldNames USCT_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsCtField.VERSION, - UsCtField.SHARING_NOTICE, - UsCtField.SALE_OPT_OUT_NOTICE, - UsCtField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - UsCtField.SALE_OPT_OUT, - UsCtField.TARGETED_ADVERTISING_OPT_OUT, - UsCtField.SENSITIVE_DATA_PROCESSING, - UsCtField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - UsCtField.MSPA_COVERED_TRANSACTION, - UsCtField.MSPA_OPT_OUT_OPTION_MODE, - UsCtField.MSPA_SERVICE_PROVIDER_MODE - ); - //@formatter:on + // @formatter:off + public static final FieldNames USCT_CORE_SEGMENT_FIELD_NAMES = + new FieldNames<>( + UsCtField.VERSION, + UsCtField.SHARING_NOTICE, + UsCtField.SALE_OPT_OUT_NOTICE, + UsCtField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + UsCtField.SALE_OPT_OUT, + UsCtField.TARGETED_ADVERTISING_OPT_OUT, + UsCtField.SENSITIVE_DATA_PROCESSING, + UsCtField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + UsCtField.MSPA_COVERED_TRANSACTION, + UsCtField.MSPA_OPT_OUT_OPTION_MODE, + UsCtField.MSPA_SERVICE_PROVIDER_MODE); + // @formatter:on - //@formatter:off - public static final FieldNames USCT_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsCtField.GPC_SEGMENT_TYPE, - UsCtField.GPC_SEGMENT_INCLUDED, - UsCtField.GPC - ); - //@formatter:on + // @formatter:off + public static final FieldNames USCT_GPC_SEGMENT_FIELD_NAMES = + new FieldNames<>(UsCtField.GPC_SEGMENT_TYPE, UsCtField.GPC_SEGMENT_INCLUDED, UsCtField.GPC); + // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java index eafe0c14..c6ed86c7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java @@ -9,14 +9,11 @@ public enum UsDeField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsDe.VERSION)), - PROCESSING_NOTICE( - new EncodableFixedInteger<>("ProcessingNotice", 2, 0, VALIDATOR_012)), - SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), + PROCESSING_NOTICE(new EncodableFixedInteger<>("ProcessingNotice", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT_NOTICE(new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), - SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT(new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( @@ -47,28 +44,25 @@ public enum UsDeField implements FieldKey { return type; } - //@formatter:off - public static final FieldNames USDE_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsDeField.VERSION, - UsDeField.PROCESSING_NOTICE, - UsDeField.SALE_OPT_OUT_NOTICE, - UsDeField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - UsDeField.SALE_OPT_OUT, - UsDeField.TARGETED_ADVERTISING_OPT_OUT, - UsDeField.SENSITIVE_DATA_PROCESSING, - UsDeField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - UsDeField.ADDITIONAL_DATA_PROCESSING_CONSENT, - UsDeField.MSPA_COVERED_TRANSACTION, - UsDeField.MSPA_OPT_OUT_OPTION_MODE, - UsDeField.MSPA_SERVICE_PROVIDER_MODE - ); - //@formatter:on + // @formatter:off + public static final FieldNames USDE_CORE_SEGMENT_FIELD_NAMES = + new FieldNames<>( + UsDeField.VERSION, + UsDeField.PROCESSING_NOTICE, + UsDeField.SALE_OPT_OUT_NOTICE, + UsDeField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + UsDeField.SALE_OPT_OUT, + UsDeField.TARGETED_ADVERTISING_OPT_OUT, + UsDeField.SENSITIVE_DATA_PROCESSING, + UsDeField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + UsDeField.ADDITIONAL_DATA_PROCESSING_CONSENT, + UsDeField.MSPA_COVERED_TRANSACTION, + UsDeField.MSPA_OPT_OUT_OPTION_MODE, + UsDeField.MSPA_SERVICE_PROVIDER_MODE); + // @formatter:on - //@formatter:off - public static final FieldNames USDE_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsDeField.GPC_SEGMENT_TYPE, - UsDeField.GPC_SEGMENT_INCLUDED, - UsDeField.GPC - ); - //@formatter:on + // @formatter:off + public static final FieldNames USDE_GPC_SEGMENT_FIELD_NAMES = + new FieldNames<>(UsDeField.GPC_SEGMENT_TYPE, UsDeField.GPC_SEGMENT_INCLUDED, UsDeField.GPC); + // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java index ec76b719..3f45ecae 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java @@ -7,19 +7,17 @@ public enum UsFlField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsFl.VERSION)), - PROCESSING_NOTICE( - new EncodableFixedInteger<>("ProcessingNotice", 2, 0, VALIDATOR_012)), - SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), + PROCESSING_NOTICE(new EncodableFixedInteger<>("ProcessingNotice", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT_NOTICE(new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), - SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT(new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, VALIDATOR_LIST_012)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, VALIDATOR_LIST_012)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS( + new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, VALIDATOR_LIST_012)), ADDITIONAL_DATA_PROCESSING_CONSENT( new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, VALIDATOR_012)), MSPA_COVERED_TRANSACTION( @@ -40,20 +38,20 @@ public enum UsFlField implements FieldKey { return type; } - //@formatter:off - public static final FieldNames USFL_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsFlField.VERSION, - UsFlField.PROCESSING_NOTICE, - UsFlField.SALE_OPT_OUT_NOTICE, - UsFlField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - UsFlField.SALE_OPT_OUT, - UsFlField.TARGETED_ADVERTISING_OPT_OUT, - UsFlField.SENSITIVE_DATA_PROCESSING, - UsFlField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - UsFlField.ADDITIONAL_DATA_PROCESSING_CONSENT, - UsFlField.MSPA_COVERED_TRANSACTION, - UsFlField.MSPA_OPT_OUT_OPTION_MODE, - UsFlField.MSPA_SERVICE_PROVIDER_MODE - ); - //@formatter:on + // @formatter:off + public static final FieldNames USFL_CORE_SEGMENT_FIELD_NAMES = + new FieldNames<>( + UsFlField.VERSION, + UsFlField.PROCESSING_NOTICE, + UsFlField.SALE_OPT_OUT_NOTICE, + UsFlField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + UsFlField.SALE_OPT_OUT, + UsFlField.TARGETED_ADVERTISING_OPT_OUT, + UsFlField.SENSITIVE_DATA_PROCESSING, + UsFlField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + UsFlField.ADDITIONAL_DATA_PROCESSING_CONSENT, + UsFlField.MSPA_COVERED_TRANSACTION, + UsFlField.MSPA_OPT_OUT_OPTION_MODE, + UsFlField.MSPA_SERVICE_PROVIDER_MODE); + // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java index cd6ebb8e..b0d655cc 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java @@ -9,16 +9,13 @@ public enum UsIaField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsIa.VERSION)), - PROCESSING_NOTICE( - new EncodableFixedInteger<>("ProcessingNotice", 2, 0, VALIDATOR_012)), - SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), + PROCESSING_NOTICE(new EncodableFixedInteger<>("ProcessingNotice", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT_NOTICE(new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_OPT_OUT_NOTICE( new EncodableFixedInteger<>("SensitiveDataOptOutNotice", 2, 0, VALIDATOR_012)), - SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT(new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( @@ -47,28 +44,25 @@ public enum UsIaField implements FieldKey { return type; } - //@formatter:off - public static final FieldNames USIA_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsIaField.VERSION, - UsIaField.PROCESSING_NOTICE, - UsIaField.SALE_OPT_OUT_NOTICE, - UsIaField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - UsIaField.SENSITIVE_DATA_OPT_OUT_NOTICE, - UsIaField.SALE_OPT_OUT, - UsIaField.TARGETED_ADVERTISING_OPT_OUT, - UsIaField.SENSITIVE_DATA_PROCESSING, - UsIaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - UsIaField.MSPA_COVERED_TRANSACTION, - UsIaField.MSPA_OPT_OUT_OPTION_MODE, - UsIaField.MSPA_SERVICE_PROVIDER_MODE - ); - //@formatter:on + // @formatter:off + public static final FieldNames USIA_CORE_SEGMENT_FIELD_NAMES = + new FieldNames<>( + UsIaField.VERSION, + UsIaField.PROCESSING_NOTICE, + UsIaField.SALE_OPT_OUT_NOTICE, + UsIaField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + UsIaField.SENSITIVE_DATA_OPT_OUT_NOTICE, + UsIaField.SALE_OPT_OUT, + UsIaField.TARGETED_ADVERTISING_OPT_OUT, + UsIaField.SENSITIVE_DATA_PROCESSING, + UsIaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + UsIaField.MSPA_COVERED_TRANSACTION, + UsIaField.MSPA_OPT_OUT_OPTION_MODE, + UsIaField.MSPA_SERVICE_PROVIDER_MODE); + // @formatter:on - //@formatter:off - public static final FieldNames USIA_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsIaField.GPC_SEGMENT_TYPE, - UsIaField.GPC_SEGMENT_INCLUDED, - UsIaField.GPC - ); - //@formatter:on + // @formatter:off + public static final FieldNames USIA_GPC_SEGMENT_FIELD_NAMES = + new FieldNames<>(UsIaField.GPC_SEGMENT_TYPE, UsIaField.GPC_SEGMENT_INCLUDED, UsIaField.GPC); + // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java index e35c7dc4..6fda2f30 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java @@ -9,19 +9,17 @@ public enum UsMtField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsMt.VERSION)), - SHARING_NOTICE( - new EncodableFixedInteger<>("SharingNotice", 2, 0, VALIDATOR_012)), - SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), + SHARING_NOTICE(new EncodableFixedInteger<>("SharingNotice", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT_NOTICE(new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), - SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT(new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, VALIDATOR_LIST_012)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, VALIDATOR_LIST_012)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS( + new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, VALIDATOR_LIST_012)), ADDITIONAL_DATA_PROCESSING_CONSENT( new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, VALIDATOR_012)), MSPA_COVERED_TRANSACTION( @@ -29,7 +27,7 @@ public enum UsMtField implements FieldKey { MSPA_OPT_OUT_OPTION_MODE( new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, VALIDATOR_012)), MSPA_SERVICE_PROVIDER_MODE( - new EncodableFixedInteger<>("MspaServiceProviderMode",2, 0, VALIDATOR_012)), + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, VALIDATOR_012)), GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), @@ -46,28 +44,25 @@ public enum UsMtField implements FieldKey { return type; } - //@formatter:off - public static final FieldNames USMT_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsMtField.VERSION, - UsMtField.SHARING_NOTICE, - UsMtField.SALE_OPT_OUT_NOTICE, - UsMtField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - UsMtField.SALE_OPT_OUT, - UsMtField.TARGETED_ADVERTISING_OPT_OUT, - UsMtField.SENSITIVE_DATA_PROCESSING, - UsMtField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - UsMtField.ADDITIONAL_DATA_PROCESSING_CONSENT, - UsMtField.MSPA_COVERED_TRANSACTION, - UsMtField.MSPA_OPT_OUT_OPTION_MODE, - UsMtField.MSPA_SERVICE_PROVIDER_MODE - ); - //@formatter:on + // @formatter:off + public static final FieldNames USMT_CORE_SEGMENT_FIELD_NAMES = + new FieldNames<>( + UsMtField.VERSION, + UsMtField.SHARING_NOTICE, + UsMtField.SALE_OPT_OUT_NOTICE, + UsMtField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + UsMtField.SALE_OPT_OUT, + UsMtField.TARGETED_ADVERTISING_OPT_OUT, + UsMtField.SENSITIVE_DATA_PROCESSING, + UsMtField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + UsMtField.ADDITIONAL_DATA_PROCESSING_CONSENT, + UsMtField.MSPA_COVERED_TRANSACTION, + UsMtField.MSPA_OPT_OUT_OPTION_MODE, + UsMtField.MSPA_SERVICE_PROVIDER_MODE); + // @formatter:on - //@formatter:off - public static FieldNames USMT_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsMtField.GPC_SEGMENT_TYPE, - UsMtField.GPC_SEGMENT_INCLUDED, - UsMtField.GPC - ); - //@formatter:on + // @formatter:off + public static FieldNames USMT_GPC_SEGMENT_FIELD_NAMES = + new FieldNames<>(UsMtField.GPC_SEGMENT_TYPE, UsMtField.GPC_SEGMENT_INCLUDED, UsMtField.GPC); + // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java index 56af13a5..3c6fd6d2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java @@ -9,29 +9,24 @@ public enum UsNatField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsNat.VERSION)), - SHARING_NOTICE( - new EncodableFixedInteger<>("SharingNotice", 2, 0, VALIDATOR_012)), - SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), - SHARING_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SharingOptOutNotice", 2, 0, VALIDATOR_012)), + SHARING_NOTICE(new EncodableFixedInteger<>("SharingNotice", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT_NOTICE(new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), + SHARING_OPT_OUT_NOTICE(new EncodableFixedInteger<>("SharingOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SensitiveDataProcessingOptOutNotice",2, 0, VALIDATOR_012)), + new EncodableFixedInteger<>("SensitiveDataProcessingOptOutNotice", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_LIMIT_USE_NOTICE( new EncodableFixedInteger<>("SensitiveDataLimitUseNotice", 2, 0, VALIDATOR_012)), - SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), - SHARING_OPT_OUT( - new EncodableFixedInteger<>("SharingOptOut", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT(new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), + SHARING_OPT_OUT(new EncodableFixedInteger<>("SharingOptOut", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 16, VALIDATOR_LIST_012)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, VALIDATOR_LIST_012)), - PERSONAL_DATA_CONSENTS( - new EncodableFixedInteger<>("PersonalDataConsents", 2, 0, VALIDATOR_012)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS( + new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, VALIDATOR_LIST_012)), + PERSONAL_DATA_CONSENTS(new EncodableFixedInteger<>("PersonalDataConsents", 2, 0, VALIDATOR_012)), MSPA_COVERED_TRANSACTION( new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, VALIDATOR_12)), MSPA_OPT_OUT_OPTION_MODE( @@ -54,32 +49,30 @@ public enum UsNatField implements FieldKey { return type; } - //@formatter:off - public static final FieldNames USNAT_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsNatField.VERSION, - UsNatField.SHARING_NOTICE, - UsNatField.SALE_OPT_OUT_NOTICE, - UsNatField.SHARING_OPT_OUT_NOTICE, - UsNatField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - UsNatField.SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE, - UsNatField.SENSITIVE_DATA_LIMIT_USE_NOTICE, - UsNatField.SALE_OPT_OUT, - UsNatField.SHARING_OPT_OUT, - UsNatField.TARGETED_ADVERTISING_OPT_OUT, - UsNatField.SENSITIVE_DATA_PROCESSING, - UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - UsNatField.PERSONAL_DATA_CONSENTS, - UsNatField.MSPA_COVERED_TRANSACTION, - UsNatField.MSPA_OPT_OUT_OPTION_MODE, - UsNatField.MSPA_SERVICE_PROVIDER_MODE - ); - //@formatter:on + // @formatter:off + public static final FieldNames USNAT_CORE_SEGMENT_FIELD_NAMES = + new FieldNames<>( + UsNatField.VERSION, + UsNatField.SHARING_NOTICE, + UsNatField.SALE_OPT_OUT_NOTICE, + UsNatField.SHARING_OPT_OUT_NOTICE, + UsNatField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + UsNatField.SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE, + UsNatField.SENSITIVE_DATA_LIMIT_USE_NOTICE, + UsNatField.SALE_OPT_OUT, + UsNatField.SHARING_OPT_OUT, + UsNatField.TARGETED_ADVERTISING_OPT_OUT, + UsNatField.SENSITIVE_DATA_PROCESSING, + UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + UsNatField.PERSONAL_DATA_CONSENTS, + UsNatField.MSPA_COVERED_TRANSACTION, + UsNatField.MSPA_OPT_OUT_OPTION_MODE, + UsNatField.MSPA_SERVICE_PROVIDER_MODE); + // @formatter:on - //@formatter:off - public static final FieldNames USNAT_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsNatField.GPC_SEGMENT_TYPE, - UsNatField.GPC_SEGMENT_INCLUDED, - UsNatField.GPC - ); - //@formatter:on + // @formatter:off + public static final FieldNames USNAT_GPC_SEGMENT_FIELD_NAMES = + new FieldNames<>( + UsNatField.GPC_SEGMENT_TYPE, UsNatField.GPC_SEGMENT_INCLUDED, UsNatField.GPC); + // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java index 4783273f..069de8c2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java @@ -9,14 +9,11 @@ public enum UsNeField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsNe.VERSION)), - PROCESSING_NOTICE( - new EncodableFixedInteger<>("ProcessingNotice", 2, 0, VALIDATOR_012)), - SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), + PROCESSING_NOTICE(new EncodableFixedInteger<>("ProcessingNotice", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT_NOTICE(new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), - SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT(new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( @@ -47,28 +44,25 @@ public enum UsNeField implements FieldKey { return type; } - //@formatter:off - public static final FieldNames USNE_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsNeField.VERSION, - UsNeField.PROCESSING_NOTICE, - UsNeField.SALE_OPT_OUT_NOTICE, - UsNeField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - UsNeField.SALE_OPT_OUT, - UsNeField.TARGETED_ADVERTISING_OPT_OUT, - UsNeField.SENSITIVE_DATA_PROCESSING, - UsNeField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - UsNeField.ADDITIONAL_DATA_PROCESSING_CONSENT, - UsNeField.MSPA_COVERED_TRANSACTION, - UsNeField.MSPA_OPT_OUT_OPTION_MODE, - UsNeField.MSPA_SERVICE_PROVIDER_MODE - ); - //@formatter:on + // @formatter:off + public static final FieldNames USNE_CORE_SEGMENT_FIELD_NAMES = + new FieldNames<>( + UsNeField.VERSION, + UsNeField.PROCESSING_NOTICE, + UsNeField.SALE_OPT_OUT_NOTICE, + UsNeField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + UsNeField.SALE_OPT_OUT, + UsNeField.TARGETED_ADVERTISING_OPT_OUT, + UsNeField.SENSITIVE_DATA_PROCESSING, + UsNeField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + UsNeField.ADDITIONAL_DATA_PROCESSING_CONSENT, + UsNeField.MSPA_COVERED_TRANSACTION, + UsNeField.MSPA_OPT_OUT_OPTION_MODE, + UsNeField.MSPA_SERVICE_PROVIDER_MODE); + // @formatter:on - //@formatter:off - public static final FieldNames USNE_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsNeField.GPC_SEGMENT_TYPE, - UsNeField.GPC_SEGMENT_INCLUDED, - UsNeField.GPC - ); - //@formatter:on + // @formatter:off + public static final FieldNames USNE_GPC_SEGMENT_FIELD_NAMES = + new FieldNames<>(UsNeField.GPC_SEGMENT_TYPE, UsNeField.GPC_SEGMENT_INCLUDED, UsNeField.GPC); + // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java index f296551a..d0e41067 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java @@ -9,19 +9,17 @@ public enum UsNhField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsNh.VERSION)), - PROCESSING_NOTICE( - new EncodableFixedInteger<>("ProcessingNotice", 2, 0, VALIDATOR_012)), - SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), + PROCESSING_NOTICE(new EncodableFixedInteger<>("ProcessingNotice", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT_NOTICE(new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), - SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT(new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, VALIDATOR_LIST_012)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, VALIDATOR_LIST_012)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS( + new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, VALIDATOR_LIST_012)), ADDITIONAL_DATA_PROCESSING_CONSENT( new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, VALIDATOR_012)), MSPA_COVERED_TRANSACTION( @@ -46,28 +44,25 @@ public enum UsNhField implements FieldKey { return type; } - //@formatter:off - public static final FieldNames USNH_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsNhField.VERSION, - UsNhField.PROCESSING_NOTICE, - UsNhField.SALE_OPT_OUT_NOTICE, - UsNhField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - UsNhField.SALE_OPT_OUT, - UsNhField.TARGETED_ADVERTISING_OPT_OUT, - UsNhField.SENSITIVE_DATA_PROCESSING, - UsNhField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - UsNhField.ADDITIONAL_DATA_PROCESSING_CONSENT, - UsNhField.MSPA_COVERED_TRANSACTION, - UsNhField.MSPA_OPT_OUT_OPTION_MODE, - UsNhField.MSPA_SERVICE_PROVIDER_MODE - ); - //@formatter:on + // @formatter:off + public static final FieldNames USNH_CORE_SEGMENT_FIELD_NAMES = + new FieldNames<>( + UsNhField.VERSION, + UsNhField.PROCESSING_NOTICE, + UsNhField.SALE_OPT_OUT_NOTICE, + UsNhField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + UsNhField.SALE_OPT_OUT, + UsNhField.TARGETED_ADVERTISING_OPT_OUT, + UsNhField.SENSITIVE_DATA_PROCESSING, + UsNhField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + UsNhField.ADDITIONAL_DATA_PROCESSING_CONSENT, + UsNhField.MSPA_COVERED_TRANSACTION, + UsNhField.MSPA_OPT_OUT_OPTION_MODE, + UsNhField.MSPA_SERVICE_PROVIDER_MODE); + // @formatter:on - //@formatter:off - public static final FieldNames USNH_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsNhField.GPC_SEGMENT_TYPE, - UsNhField.GPC_SEGMENT_INCLUDED, - UsNhField.GPC - ); - //@formatter:on + // @formatter:off + public static final FieldNames USNH_GPC_SEGMENT_FIELD_NAMES = + new FieldNames<>(UsNhField.GPC_SEGMENT_TYPE, UsNhField.GPC_SEGMENT_INCLUDED, UsNhField.GPC); + // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java index 061cb5ae..b1dc6d64 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java @@ -9,19 +9,17 @@ public enum UsNjField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsNj.VERSION)), - PROCESSING_NOTICE( - new EncodableFixedInteger<>("ProcessingNotice", 2, 0, VALIDATOR_012)), - SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), + PROCESSING_NOTICE(new EncodableFixedInteger<>("ProcessingNotice", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT_NOTICE(new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice",2, 0, VALIDATOR_012)), - SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut",2, 0, VALIDATOR_012)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT(new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 10, VALIDATOR_LIST_012)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 5, VALIDATOR_LIST_012)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS( + new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 5, VALIDATOR_LIST_012)), ADDITIONAL_DATA_PROCESSING_CONSENT( new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, VALIDATOR_012)), MSPA_COVERED_TRANSACTION( @@ -46,28 +44,25 @@ public enum UsNjField implements FieldKey { return type; } - //@formatter:off - public static final FieldNames USNJ_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsNjField.VERSION, - UsNjField.PROCESSING_NOTICE, - UsNjField.SALE_OPT_OUT_NOTICE, - UsNjField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - UsNjField.SALE_OPT_OUT, - UsNjField.TARGETED_ADVERTISING_OPT_OUT, - UsNjField.SENSITIVE_DATA_PROCESSING, - UsNjField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - UsNjField.ADDITIONAL_DATA_PROCESSING_CONSENT, - UsNjField.MSPA_COVERED_TRANSACTION, - UsNjField.MSPA_OPT_OUT_OPTION_MODE, - UsNjField.MSPA_SERVICE_PROVIDER_MODE - ); - //@formatter:on + // @formatter:off + public static final FieldNames USNJ_CORE_SEGMENT_FIELD_NAMES = + new FieldNames<>( + UsNjField.VERSION, + UsNjField.PROCESSING_NOTICE, + UsNjField.SALE_OPT_OUT_NOTICE, + UsNjField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + UsNjField.SALE_OPT_OUT, + UsNjField.TARGETED_ADVERTISING_OPT_OUT, + UsNjField.SENSITIVE_DATA_PROCESSING, + UsNjField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + UsNjField.ADDITIONAL_DATA_PROCESSING_CONSENT, + UsNjField.MSPA_COVERED_TRANSACTION, + UsNjField.MSPA_OPT_OUT_OPTION_MODE, + UsNjField.MSPA_SERVICE_PROVIDER_MODE); + // @formatter:on - //@formatter:off - public static final FieldNames USNJ_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsNjField.GPC_SEGMENT_TYPE, - UsNjField.GPC_SEGMENT_INCLUDED, - UsNjField.GPC - ); - //@formatter:on + // @formatter:off + public static final FieldNames USNJ_GPC_SEGMENT_FIELD_NAMES = + new FieldNames<>(UsNjField.GPC_SEGMENT_TYPE, UsNjField.GPC_SEGMENT_INCLUDED, UsNjField.GPC); + // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java index 4061920d..a8a016fb 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java @@ -9,19 +9,17 @@ public enum UsOrField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsOr.VERSION)), - PROCESSING_NOTICE( - new EncodableFixedInteger<>("ProcessingNotice", 2, 0, VALIDATOR_012)), - SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), + PROCESSING_NOTICE(new EncodableFixedInteger<>("ProcessingNotice", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT_NOTICE(new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), - SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT(new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 11, VALIDATOR_LIST_012)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, VALIDATOR_LIST_012)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS( + new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, VALIDATOR_LIST_012)), ADDITIONAL_DATA_PROCESSING_CONSENT( new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, VALIDATOR_012)), MSPA_COVERED_TRANSACTION( @@ -46,28 +44,25 @@ public enum UsOrField implements FieldKey { return type; } - //@formatter:off - public static final FieldNames USOR_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsOrField.VERSION, - UsOrField.PROCESSING_NOTICE, - UsOrField.SALE_OPT_OUT_NOTICE, - UsOrField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - UsOrField.SALE_OPT_OUT, - UsOrField.TARGETED_ADVERTISING_OPT_OUT, - UsOrField.SENSITIVE_DATA_PROCESSING, - UsOrField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - UsOrField.ADDITIONAL_DATA_PROCESSING_CONSENT, - UsOrField.MSPA_COVERED_TRANSACTION, - UsOrField.MSPA_OPT_OUT_OPTION_MODE, - UsOrField.MSPA_SERVICE_PROVIDER_MODE - ); - //@formatter:on + // @formatter:off + public static final FieldNames USOR_CORE_SEGMENT_FIELD_NAMES = + new FieldNames<>( + UsOrField.VERSION, + UsOrField.PROCESSING_NOTICE, + UsOrField.SALE_OPT_OUT_NOTICE, + UsOrField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + UsOrField.SALE_OPT_OUT, + UsOrField.TARGETED_ADVERTISING_OPT_OUT, + UsOrField.SENSITIVE_DATA_PROCESSING, + UsOrField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + UsOrField.ADDITIONAL_DATA_PROCESSING_CONSENT, + UsOrField.MSPA_COVERED_TRANSACTION, + UsOrField.MSPA_OPT_OUT_OPTION_MODE, + UsOrField.MSPA_SERVICE_PROVIDER_MODE); + // @formatter:on - //@formatter:off - public static final FieldNames USOR_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsOrField.GPC_SEGMENT_TYPE, - UsOrField.GPC_SEGMENT_INCLUDED, - UsOrField.GPC - ); - //@formatter:on + // @formatter:off + public static final FieldNames USOR_GPC_SEGMENT_FIELD_NAMES = + new FieldNames<>(UsOrField.GPC_SEGMENT_TYPE, UsOrField.GPC_SEGMENT_INCLUDED, UsOrField.GPC); + // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java index 83cba306..bc7c29d7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java @@ -9,14 +9,11 @@ public enum UsTnField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsTn.VERSION)), - PROCESSING_NOTICE( - new EncodableFixedInteger<>("ProcessingNotice", 2, 0, VALIDATOR_012)), - SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice",2, 0, VALIDATOR_012)), + PROCESSING_NOTICE(new EncodableFixedInteger<>("ProcessingNotice", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT_NOTICE(new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), - SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT(new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( @@ -47,28 +44,25 @@ public enum UsTnField implements FieldKey { return type; } - //@formatter:off - public static final FieldNames USTN_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsTnField.VERSION, - UsTnField.PROCESSING_NOTICE, - UsTnField.SALE_OPT_OUT_NOTICE, - UsTnField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - UsTnField.SALE_OPT_OUT, - UsTnField.TARGETED_ADVERTISING_OPT_OUT, - UsTnField.SENSITIVE_DATA_PROCESSING, - UsTnField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - UsTnField.ADDITIONAL_DATA_PROCESSING_CONSENT, - UsTnField.MSPA_COVERED_TRANSACTION, - UsTnField.MSPA_OPT_OUT_OPTION_MODE, - UsTnField.MSPA_SERVICE_PROVIDER_MODE - ); - //@formatter:on + // @formatter:off + public static final FieldNames USTN_CORE_SEGMENT_FIELD_NAMES = + new FieldNames<>( + UsTnField.VERSION, + UsTnField.PROCESSING_NOTICE, + UsTnField.SALE_OPT_OUT_NOTICE, + UsTnField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + UsTnField.SALE_OPT_OUT, + UsTnField.TARGETED_ADVERTISING_OPT_OUT, + UsTnField.SENSITIVE_DATA_PROCESSING, + UsTnField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + UsTnField.ADDITIONAL_DATA_PROCESSING_CONSENT, + UsTnField.MSPA_COVERED_TRANSACTION, + UsTnField.MSPA_OPT_OUT_OPTION_MODE, + UsTnField.MSPA_SERVICE_PROVIDER_MODE); + // @formatter:on - //@formatter:off - public static final FieldNames USTN_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsTnField.GPC_SEGMENT_TYPE, - UsTnField.GPC_SEGMENT_INCLUDED, - UsTnField.GPC - ); - //@formatter:on + // @formatter:off + public static final FieldNames USTN_GPC_SEGMENT_FIELD_NAMES = + new FieldNames<>(UsTnField.GPC_SEGMENT_TYPE, UsTnField.GPC_SEGMENT_INCLUDED, UsTnField.GPC); + // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java index 91d5cc17..abcd9b58 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java @@ -9,14 +9,11 @@ public enum UsTxField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsTx.VERSION)), - PROCESSING_NOTICE( - new EncodableFixedInteger<>("ProcessingNotice", 2, 0, VALIDATOR_012)), - SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), + PROCESSING_NOTICE(new EncodableFixedInteger<>("ProcessingNotice", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT_NOTICE(new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), - SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT(new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( @@ -47,28 +44,25 @@ public enum UsTxField implements FieldKey { return type; } - //@formatter:off - public static final FieldNames USTX_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsTxField.VERSION, - UsTxField.PROCESSING_NOTICE, - UsTxField.SALE_OPT_OUT_NOTICE, - UsTxField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - UsTxField.SALE_OPT_OUT, - UsTxField.TARGETED_ADVERTISING_OPT_OUT, - UsTxField.SENSITIVE_DATA_PROCESSING, - UsTxField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - UsTxField.ADDITIONAL_DATA_PROCESSING_CONSENT, - UsTxField.MSPA_COVERED_TRANSACTION, - UsTxField.MSPA_OPT_OUT_OPTION_MODE, - UsTxField.MSPA_SERVICE_PROVIDER_MODE - ); - //@formatter:on + // @formatter:off + public static final FieldNames USTX_CORE_SEGMENT_FIELD_NAMES = + new FieldNames<>( + UsTxField.VERSION, + UsTxField.PROCESSING_NOTICE, + UsTxField.SALE_OPT_OUT_NOTICE, + UsTxField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + UsTxField.SALE_OPT_OUT, + UsTxField.TARGETED_ADVERTISING_OPT_OUT, + UsTxField.SENSITIVE_DATA_PROCESSING, + UsTxField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + UsTxField.ADDITIONAL_DATA_PROCESSING_CONSENT, + UsTxField.MSPA_COVERED_TRANSACTION, + UsTxField.MSPA_OPT_OUT_OPTION_MODE, + UsTxField.MSPA_SERVICE_PROVIDER_MODE); + // @formatter:on - //@formatter:off - public static FieldNames USTX_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsTxField.GPC_SEGMENT_TYPE, - UsTxField.GPC_SEGMENT_INCLUDED, - UsTxField.GPC - ); - //@formatter:on + // @formatter:off + public static FieldNames USTX_GPC_SEGMENT_FIELD_NAMES = + new FieldNames<>(UsTxField.GPC_SEGMENT_TYPE, UsTxField.GPC_SEGMENT_INCLUDED, UsTxField.GPC); + // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java index 0c36f6be..8b583cca 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java @@ -7,16 +7,13 @@ public enum UsUtField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsUt.VERSION)), - SHARING_NOTICE( - new EncodableFixedInteger<>("SharingNotice", 2, 0, VALIDATOR_012)), - SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), + SHARING_NOTICE(new EncodableFixedInteger<>("SharingNotice", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT_NOTICE(new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SensitiveDataProcessingOptOutNotice",2, 0, VALIDATOR_012)), - SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut",2, 0, VALIDATOR_012)), + new EncodableFixedInteger<>("SensitiveDataProcessingOptOutNotice", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT(new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( @@ -41,20 +38,20 @@ public enum UsUtField implements FieldKey { return type; } - //@formatter:off - public static final FieldNames USUT_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsUtField.VERSION, - UsUtField.SHARING_NOTICE, - UsUtField.SALE_OPT_OUT_NOTICE, - UsUtField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - UsUtField.SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE, - UsUtField.SALE_OPT_OUT, - UsUtField.TARGETED_ADVERTISING_OPT_OUT, - UsUtField.SENSITIVE_DATA_PROCESSING, - UsUtField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - UsUtField.MSPA_COVERED_TRANSACTION, - UsUtField.MSPA_OPT_OUT_OPTION_MODE, - UsUtField.MSPA_SERVICE_PROVIDER_MODE - ); - //@formatter:on + // @formatter:off + public static final FieldNames USUT_CORE_SEGMENT_FIELD_NAMES = + new FieldNames<>( + UsUtField.VERSION, + UsUtField.SHARING_NOTICE, + UsUtField.SALE_OPT_OUT_NOTICE, + UsUtField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + UsUtField.SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE, + UsUtField.SALE_OPT_OUT, + UsUtField.TARGETED_ADVERTISING_OPT_OUT, + UsUtField.SENSITIVE_DATA_PROCESSING, + UsUtField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + UsUtField.MSPA_COVERED_TRANSACTION, + UsUtField.MSPA_OPT_OUT_OPTION_MODE, + UsUtField.MSPA_SERVICE_PROVIDER_MODE); + // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java index 287eaf55..057ed29f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java @@ -7,14 +7,11 @@ public enum UsVaField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsVa.VERSION)), - SHARING_NOTICE( - new EncodableFixedInteger<>("SharingNotice", 2, 0, VALIDATOR_012)), - SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), + SHARING_NOTICE(new EncodableFixedInteger<>("SharingNotice", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT_NOTICE(new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), - SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT(new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( @@ -39,19 +36,19 @@ public enum UsVaField implements FieldKey { return type; } - //@formatter:off - public static final FieldNames USVA_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsVaField.VERSION, - UsVaField.SHARING_NOTICE, - UsVaField.SALE_OPT_OUT_NOTICE, - UsVaField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - UsVaField.SALE_OPT_OUT, - UsVaField.TARGETED_ADVERTISING_OPT_OUT, - UsVaField.SENSITIVE_DATA_PROCESSING, - UsVaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - UsVaField.MSPA_COVERED_TRANSACTION, - UsVaField.MSPA_OPT_OUT_OPTION_MODE, - UsVaField.MSPA_SERVICE_PROVIDER_MODE - ); - //@formatter:on + // @formatter:off + public static final FieldNames USVA_CORE_SEGMENT_FIELD_NAMES = + new FieldNames<>( + UsVaField.VERSION, + UsVaField.SHARING_NOTICE, + UsVaField.SALE_OPT_OUT_NOTICE, + UsVaField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + UsVaField.SALE_OPT_OUT, + UsVaField.TARGETED_ADVERTISING_OPT_OUT, + UsVaField.SENSITIVE_DATA_PROCESSING, + UsVaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + UsVaField.MSPA_COVERED_TRANSACTION, + UsVaField.MSPA_OPT_OUT_OPTION_MODE, + UsVaField.MSPA_SERVICE_PROVIDER_MODE); + // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java index 42921193..4f584830 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java @@ -8,8 +8,10 @@ public enum UspV1Field implements FieldKey { VERSION(new UnencodableInteger<>("Version", UspV1.VERSION)), NOTICE(new UnencodableCharacter<>("Notice", '-', (v -> v == 'Y' || v == 'N' || v == '-'))), - OPT_OUT_SALE(new UnencodableCharacter<>("OptOutSale", '-', (v -> v == 'Y' || v == 'N' || v == '-'))), - LSPA_COVERED(new UnencodableCharacter<>("LspaCovered", '-', (v -> v == 'Y' || v == 'N' || v == '-'))); + OPT_OUT_SALE( + new UnencodableCharacter<>("OptOutSale", '-', (v -> v == 'Y' || v == 'N' || v == '-'))), + LSPA_COVERED( + new UnencodableCharacter<>("LspaCovered", '-', (v -> v == 'Y' || v == 'N' || v == '-'))); private final DataType type; @@ -22,12 +24,9 @@ public enum UspV1Field implements FieldKey { return type; } - //@formatter:off - public static final FieldNames USPV1_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( - UspV1Field.VERSION, - UspV1Field.NOTICE, - UspV1Field.OPT_OUT_SALE, - UspV1Field.LSPA_COVERED - ); - //@formatter:on + // @formatter:off + public static final FieldNames USPV1_CORE_SEGMENT_FIELD_NAMES = + new FieldNames<>( + UspV1Field.VERSION, UspV1Field.NOTICE, UspV1Field.OPT_OUT_SALE, UspV1Field.LSPA_COVERED); + // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractEncodable.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractEncodable.java index cb095ae7..126dca76 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractEncodable.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractEncodable.java @@ -3,7 +3,7 @@ import com.iab.gpp.encoder.datatype.Dirtyable; public abstract class AbstractEncodable implements Dirtyable { - + private CharSequence encoded; private boolean decoded = true; @@ -43,5 +43,4 @@ public final CharSequence encodeCharSequence() { } return this.encoded; } - } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractUsSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractUsSection.java index f934b161..2e25a6cd 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractUsSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractUsSection.java @@ -9,5 +9,4 @@ public abstract class AbstractUsSection & FieldKey> extends En protected AbstractUsSection(EncodableSegment... segments) { super(segments); } - } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractUsSectionWithGpc.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractUsSectionWithGpc.java index 2c7c0390..2fce4634 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractUsSectionWithGpc.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractUsSectionWithGpc.java @@ -1,13 +1,15 @@ package com.iab.gpp.encoder.section; -import java.util.ArrayList; -import java.util.List; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; +import java.util.ArrayList; +import java.util.List; -public abstract class AbstractUsSectionWithGpc & FieldKey> extends AbstractUsSection { +public abstract class AbstractUsSectionWithGpc & FieldKey> + extends AbstractUsSection { - protected AbstractUsSectionWithGpc(EncodableSegment coreSegment, EncodableSegment gpcSegment) { + protected AbstractUsSectionWithGpc( + EncodableSegment coreSegment, EncodableSegment gpcSegment) { super(coreSegment, gpcSegment); } @@ -37,11 +39,11 @@ protected final CharSequence doEncode() { List encodedSegments = new ArrayList<>(size); encodedSegments.add(getSegment(0).encodeCharSequence()); - if(size >= 2 && getGpcSegmentIncluded()) { + if (size >= 2 && getGpcSegmentIncluded()) { encodedSegments.add(getSegment(1).encodeCharSequence()); } - return SlicedCharSequence.join('.', encodedSegments); + return SlicedCharSequence.join('.', encodedSegments); } public abstract Integer getGpcSegmentType(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java index 169bf43e..14b5d3dc 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java @@ -129,7 +129,7 @@ public final void setFieldValue(E fieldName, Object value) { int numSegments = size(); for (int i = 0; i < numSegments; i++) { EncodableSegment segment = getSegment(i); - if(segment.hasField(fieldName)) { + if (segment.hasField(fieldName)) { segment.setFieldValue(fieldName, value); onSet(fieldName); return; @@ -166,7 +166,12 @@ public final void setDirty(boolean dirty) { public final String toString() { ensureDecode(); StringBuilder sb = new StringBuilder(); - sb.append("{id=").append(getId()).append(", name=").append(getName()).append(", version=").append(getVersion()); + sb.append("{id=") + .append(getId()) + .append(", name=") + .append(getName()) + .append(", version=") + .append(getVersion()); int numSegments = size(); for (int i = 0; i < numSegments; i++) { sb.append(", ").append(getSegment(i).toString()); @@ -174,5 +179,4 @@ public final String toString() { sb.append('}'); return sb.toString(); } - } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/SlicedCharSequence.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/SlicedCharSequence.java index 85c7e5f7..33d62b76 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/SlicedCharSequence.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/SlicedCharSequence.java @@ -66,7 +66,6 @@ public static final CharSequence join(char glue, List pieces) { return EMPTY; } - @Override public int length() { return end - start; @@ -86,5 +85,4 @@ public CharSequence subSequence(int newStart, int newEnd) { public String toString() { return base.substring(start, end); } - } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java index 0b47b597..fc14c315 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java @@ -1,13 +1,13 @@ package com.iab.gpp.encoder.section; -import java.time.Instant; -import java.util.ArrayList; -import java.util.List; import com.iab.gpp.encoder.datatype.IntegerSet; import com.iab.gpp.encoder.datatype.RangeEntry; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.field.TcfCaV1Field; import com.iab.gpp.encoder.segment.Base64Segment; +import java.time.Instant; +import java.util.ArrayList; +import java.util.List; public class TcfCaV1 extends EncodableSection { @@ -16,7 +16,10 @@ public class TcfCaV1 extends EncodableSection { public static final String NAME = "tcfcav1"; public TcfCaV1() { - super(new Base64Segment<>(TcfCaV1Field.TCFCAV1_CORE_SEGMENT_FIELD_NAMES), new Base64Segment<>(TcfCaV1Field.TCFCAV1_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES), new Base64Segment<>(TcfCaV1Field.TCFCAV1_DISCLOSED_VENDORS_SEGMENT_FIELD_NAMES)); + super( + new Base64Segment<>(TcfCaV1Field.TCFCAV1_CORE_SEGMENT_FIELD_NAMES), + new Base64Segment<>(TcfCaV1Field.TCFCAV1_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES), + new Base64Segment<>(TcfCaV1Field.TCFCAV1_DISCLOSED_VENDORS_SEGMENT_FIELD_NAMES)); } public TcfCaV1(CharSequence encodedString) { @@ -46,25 +49,25 @@ protected void doDecode(CharSequence encodedString) { for (int i = 0; i < numEncodedSegments; i++) { /** - * The first 3 bits contain the segment id. Rather than decode the entire string, just check the first character. + * The first 3 bits contain the segment id. Rather than decode the entire string, just check + * the first character. * - * A-H = '000' = 0 - * I-P = '001' = 1 - * Y-Z,a-f = '011' = 3 + *

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

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

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

Note that there is no segment id field for the core segment. Instead the first 6 bits + * are reserved for the encoding version which only coincidentally works here because the + * version value is less than 8. */ - CharSequence encodedSegment = encodedSegments.get(i); if (encodedSegment.length() > 0) { char firstChar = encodedSegment.charAt(0); // unfortunately, the segment ordering doesn't match the segment ids - if(firstChar >= 'A' && firstChar <= 'H') { + if (firstChar >= 'A' && firstChar <= 'H') { getSegment(0).decode(encodedSegment); - } else if(firstChar >= 'I' && firstChar <= 'P') { + } else if (firstChar >= 'I' && firstChar <= 'P') { getSegment(3).decode(encodedSegment); - } else if(firstChar >= 'Q' && firstChar <= 'X') { + } else if (firstChar >= 'Q' && firstChar <= 'X') { getSegment(2).decode(encodedSegment); - } else if((firstChar >= 'Y' && firstChar <= 'Z') || (firstChar >= 'a' && firstChar <= 'f')) { + } else if ((firstChar >= 'Y' && firstChar <= 'Z') + || (firstChar >= 'a' && firstChar <= 'f')) { getSegment(1).decode(encodedSegment); } else { throw new DecodingException("Invalid segment '" + encodedSegment + "'"); @@ -99,7 +102,7 @@ public CharSequence doEncode() { } } - return SlicedCharSequence.join('.', encodedSegments); + return SlicedCharSequence.join('.', encodedSegments); } @Override @@ -224,6 +227,4 @@ public Integer getVendorsDisclosedSegmentType() { public IntegerSet getVendorsDisclosed() { return (IntegerSet) this.getFieldValue(TcfEuV2Field.VENDORS_DISCLOSED); } - - } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java index 7319eeae..c51eb0da 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java @@ -11,7 +11,9 @@ public class UsCa extends AbstractUsSectionWithGpc { public static final String NAME = "usca"; public UsCa() { - super(new Base64Segment<>(UsCaField.USCA_CORE_SEGMENT_FIELD_NAMES), new Base64Segment<>(UsCaField.USCA_GPC_SEGMENT_FIELD_NAMES)); + super( + new Base64Segment<>(UsCaField.USCA_CORE_SEGMENT_FIELD_NAMES), + new Base64Segment<>(UsCaField.USCA_GPC_SEGMENT_FIELD_NAMES)); } public UsCa(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java index 8adad7f5..63f6de51 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java @@ -11,7 +11,9 @@ public class UsCo extends AbstractUsSectionWithGpc { public static final String NAME = "usco"; public UsCo() { - super(new Base64Segment<>(UsCoField.USCO_CORE_SEGMENT_FIELD_NAMES), new Base64Segment<>(UsCoField.USCO_GPC_SEGMENT_FIELD_NAMES)); + super( + new Base64Segment<>(UsCoField.USCO_CORE_SEGMENT_FIELD_NAMES), + new Base64Segment<>(UsCoField.USCO_GPC_SEGMENT_FIELD_NAMES)); } public UsCo(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java index d1f06d17..5d1cdddc 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java @@ -11,7 +11,9 @@ public class UsCt extends AbstractUsSectionWithGpc { public static final String NAME = "usct"; public UsCt() { - super(new Base64Segment<>(UsCtField.USCT_CORE_SEGMENT_FIELD_NAMES), new Base64Segment<>(UsCtField.USCT_GPC_SEGMENT_FIELD_NAMES)); + super( + new Base64Segment<>(UsCtField.USCT_CORE_SEGMENT_FIELD_NAMES), + new Base64Segment<>(UsCtField.USCT_GPC_SEGMENT_FIELD_NAMES)); } public UsCt(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java index a0ddd15e..8fb0888e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java @@ -11,7 +11,9 @@ public class UsDe extends AbstractUsSectionWithGpc { public static final String NAME = "usde"; public UsDe() { - super(new Base64Segment<>(UsDeField.USDE_CORE_SEGMENT_FIELD_NAMES), new Base64Segment<>(UsDeField.USDE_GPC_SEGMENT_FIELD_NAMES)); + super( + new Base64Segment<>(UsDeField.USDE_CORE_SEGMENT_FIELD_NAMES), + new Base64Segment<>(UsDeField.USDE_GPC_SEGMENT_FIELD_NAMES)); } public UsDe(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java index 65445d6a..918066b6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java @@ -11,7 +11,9 @@ public class UsIa extends AbstractUsSectionWithGpc { public static final String NAME = "usia"; public UsIa() { - super(new Base64Segment<>(UsIaField.USIA_CORE_SEGMENT_FIELD_NAMES), new Base64Segment<>(UsIaField.USIA_GPC_SEGMENT_FIELD_NAMES)); + super( + new Base64Segment<>(UsIaField.USIA_CORE_SEGMENT_FIELD_NAMES), + new Base64Segment<>(UsIaField.USIA_GPC_SEGMENT_FIELD_NAMES)); } public UsIa(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java index 1168a0f0..972f661b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java @@ -11,7 +11,9 @@ public class UsMt extends AbstractUsSectionWithGpc { public static final String NAME = "usmt"; public UsMt() { - super(new Base64Segment<>(UsMtField.USMT_CORE_SEGMENT_FIELD_NAMES), new Base64Segment<>(UsMtField.USMT_GPC_SEGMENT_FIELD_NAMES)); + super( + new Base64Segment<>(UsMtField.USMT_CORE_SEGMENT_FIELD_NAMES), + new Base64Segment<>(UsMtField.USMT_GPC_SEGMENT_FIELD_NAMES)); } public UsMt(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java index f4232999..5b6beb26 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java @@ -11,7 +11,9 @@ public class UsNe extends AbstractUsSectionWithGpc { public static final String NAME = "usne"; public UsNe() { - super(new Base64Segment<>(UsNeField.USNE_CORE_SEGMENT_FIELD_NAMES), new Base64Segment<>(UsNeField.USNE_GPC_SEGMENT_FIELD_NAMES)); + super( + new Base64Segment<>(UsNeField.USNE_CORE_SEGMENT_FIELD_NAMES), + new Base64Segment<>(UsNeField.USNE_GPC_SEGMENT_FIELD_NAMES)); } public UsNe(CharSequence encodedString) { @@ -39,7 +41,6 @@ protected final UsNeField getGpcSegmentIncludedKey() { return UsNeField.GPC_SEGMENT_INCLUDED; } - public Integer getProcessingNotice() { return (Integer) this.getFieldValue(UsNeField.PROCESSING_NOTICE); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java index 53bbd2d3..413357a4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java @@ -11,7 +11,9 @@ public class UsNh extends AbstractUsSectionWithGpc { public static final String NAME = "usnh"; public UsNh() { - super(new Base64Segment<>(UsNhField.USNH_CORE_SEGMENT_FIELD_NAMES), new Base64Segment<>(UsNhField.USNH_GPC_SEGMENT_FIELD_NAMES)); + super( + new Base64Segment<>(UsNhField.USNH_CORE_SEGMENT_FIELD_NAMES), + new Base64Segment<>(UsNhField.USNH_GPC_SEGMENT_FIELD_NAMES)); } public UsNh(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java index 8d3714f6..2e996507 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java @@ -11,7 +11,9 @@ public class UsNj extends AbstractUsSectionWithGpc { public static final String NAME = "usnj"; public UsNj() { - super(new Base64Segment<>(UsNjField.USNJ_CORE_SEGMENT_FIELD_NAMES), new Base64Segment<>(UsNjField.USNJ_GPC_SEGMENT_FIELD_NAMES)); + super( + new Base64Segment<>(UsNjField.USNJ_CORE_SEGMENT_FIELD_NAMES), + new Base64Segment<>(UsNjField.USNJ_GPC_SEGMENT_FIELD_NAMES)); } public UsNj(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java index 4de29c8f..ddd2be6e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java @@ -11,7 +11,9 @@ public class UsOr extends AbstractUsSectionWithGpc { public static final String NAME = "usor"; public UsOr() { - super(new Base64Segment<>(UsOrField.USOR_CORE_SEGMENT_FIELD_NAMES), new Base64Segment<>(UsOrField.USOR_GPC_SEGMENT_FIELD_NAMES)); + super( + new Base64Segment<>(UsOrField.USOR_CORE_SEGMENT_FIELD_NAMES), + new Base64Segment<>(UsOrField.USOR_GPC_SEGMENT_FIELD_NAMES)); } public UsOr(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java index 504bb7da..89cf9842 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java @@ -11,7 +11,9 @@ public class UsTn extends AbstractUsSectionWithGpc { public static final String NAME = "ustn"; public UsTn() { - super(new Base64Segment<>(UsTnField.USTN_CORE_SEGMENT_FIELD_NAMES), new Base64Segment<>(UsTnField.USTN_GPC_SEGMENT_FIELD_NAMES)); + super( + new Base64Segment<>(UsTnField.USTN_CORE_SEGMENT_FIELD_NAMES), + new Base64Segment<>(UsTnField.USTN_GPC_SEGMENT_FIELD_NAMES)); } public UsTn(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java index 4dce1398..40bac9d1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java @@ -11,7 +11,9 @@ public class UsTx extends AbstractUsSectionWithGpc { public static final String NAME = "ustx"; public UsTx() { - super(new Base64Segment<>(UsTxField.USTX_CORE_SEGMENT_FIELD_NAMES), new Base64Segment<>(UsTxField.USTX_GPC_SEGMENT_FIELD_NAMES)); + super( + new Base64Segment<>(UsTxField.USTX_CORE_SEGMENT_FIELD_NAMES), + new Base64Segment<>(UsTxField.USTX_GPC_SEGMENT_FIELD_NAMES)); } public UsTx(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java index 8c0cc9da..4c81876f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java @@ -77,6 +77,4 @@ public Integer getMspaOptOutOptionMode() { public Integer getMspaServiceProviderMode() { return (Integer) this.getFieldValue(UsUtField.MSPA_SERVICE_PROVIDER_MODE); } - - } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java index 8e49f8e4..090651a2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java @@ -8,14 +8,15 @@ import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.field.FieldNames; -abstract class AbstractBase64Segment & FieldKey> extends AbstractLazilyEncodableSegment { - +abstract class AbstractBase64Segment & FieldKey> + extends AbstractLazilyEncodableSegment { + protected AbstractBase64Segment(FieldNames fieldNames) { super(fieldNames); } protected abstract AbstractBase64UrlEncoder getBase64UrlEncoder(); - + @Override protected final CharSequence doEncode() { BitString bitString = new BitString(); @@ -45,12 +46,12 @@ protected final void doDecode(CharSequence encodedString) { } } } catch (Exception e) { - throw new DecodingException("Unable to decode "+ getClass().getSimpleName() +" '" + encodedString + "'", e); + throw new DecodingException( + "Unable to decode " + getClass().getSimpleName() + " '" + encodedString + "'", e); } } protected BitString decodeBitString(CharSequence encodedString) { return getBase64UrlEncoder().decode(encodedString); } - } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java index 0d2f0a09..e6386caa 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java @@ -4,7 +4,8 @@ import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.field.FieldNames; -abstract class AbstractLazilyEncodableSegment & FieldKey> extends EncodableSegment { +abstract class AbstractLazilyEncodableSegment & FieldKey> + extends EncodableSegment { protected final FieldNames fieldNames; protected final Object[] values; @@ -92,5 +93,4 @@ public String toString() { sb.append('}'); return sb.toString(); } - } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/Base64Segment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/Base64Segment.java index 126845e7..181e187a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/Base64Segment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/Base64Segment.java @@ -14,5 +14,4 @@ public Base64Segment(FieldNames fieldNames) { protected AbstractBase64UrlEncoder getBase64UrlEncoder() { return CompressedBase64UrlEncoder.getInstance(); } - } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/SegmentValueProvider.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/SegmentValueProvider.java index 52c2a61d..dc5368a6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/SegmentValueProvider.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/SegmentValueProvider.java @@ -4,7 +4,7 @@ public class SegmentValueProvider & FieldKey> { private final E key; - + public SegmentValueProvider(E key) { this.key = key; } @@ -12,9 +12,8 @@ public SegmentValueProvider(E key) { public int modify(int original) { return original; } - + public final int extract(EncodableSegment segment) { return (Integer) segment.getFieldValueUnsafe(key); } - } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TraditionalBase64Segment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TraditionalBase64Segment.java index dccbd52e..5b2610be 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TraditionalBase64Segment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TraditionalBase64Segment.java @@ -5,7 +5,8 @@ import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.field.FieldNames; -public final class TraditionalBase64Segment & FieldKey> extends AbstractBase64Segment { +public final class TraditionalBase64Segment & FieldKey> + extends AbstractBase64Segment { public TraditionalBase64Segment(FieldNames fieldNames) { super(fieldNames); @@ -14,5 +15,4 @@ public TraditionalBase64Segment(FieldNames fieldNames) { protected AbstractBase64UrlEncoder getBase64UrlEncoder() { return TraditionalBase64UrlEncoder.getInstance(); } - } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java index d87a5997..a57fe3d1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java @@ -19,11 +19,12 @@ protected AbstractBase64UrlEncoder getBase64UrlEncoder() { protected BitString decodeBitString(CharSequence encodedString) { BitString bitString = super.decodeBitString(encodedString); // Necessary to maintain backwards compatibility when sensitive data processing changed from a - // length of 12 to 16 and known child sensitive data consents changed from a length of 2 to 3 in the + // length of 12 to 16 and known child sensitive data consents changed from a length of 2 to 3 in + // the // DE, IA, NE, NH, NJ, TN release if (bitString.length() == 66) { BitString builder = new BitString(); - + builder.write(bitString, 0, 48); builder.writeEmpty(8); builder.write(bitString, 48, 52); @@ -33,5 +34,4 @@ protected BitString decodeBitString(CharSequence encodedString) { } return bitString; } - } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java index 4e952a93..9defd655 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java @@ -26,7 +26,7 @@ protected void doDecode(CharSequence encodedString) { } try { - setFieldValueUnsafe(UspV1Field.VERSION, (int)(encodedString.charAt(0) - '0')); + setFieldValueUnsafe(UspV1Field.VERSION, (int) (encodedString.charAt(0) - '0')); setFieldValueUnsafe(UspV1Field.NOTICE, encodedString.charAt(1)); setFieldValueUnsafe(UspV1Field.OPT_OUT_SALE, encodedString.charAt(2)); setFieldValueUnsafe(UspV1Field.LSPA_COVERED, encodedString.charAt(3)); @@ -34,6 +34,4 @@ protected void doDecode(CharSequence encodedString) { throw new DecodingException("Unable to decode UspV1CoreSegment '" + encodedString + "'", e); } } - } - diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java index 11721096..e009c089 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java @@ -1,14 +1,5 @@ package com.iab.gpp.encoder; -import java.time.Instant; -import java.time.ZoneId; -import java.time.ZonedDateTime; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Set; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.field.TcfCaV1Field; import com.iab.gpp.encoder.field.TcfEuV2Field; @@ -48,10 +39,20 @@ import com.iab.gpp.encoder.section.UsUt; import com.iab.gpp.encoder.section.UsVa; import com.iab.gpp.encoder.section.UspV1; +import java.time.Instant; +import java.time.ZoneId; +import java.time.ZonedDateTime; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Set; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; public class GppModelTest { - private Instant utcDateTime = ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant(); + private Instant utcDateTime = + ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant(); @Test public void testEncodeDefault() { @@ -75,7 +76,6 @@ public void testEncodeDefault() { Assertions.assertEquals(false, gppModel.hasSection(UspV1.NAME)); Assertions.assertEquals(false, gppModel.hasSection(TcfEuV2.NAME)); Assertions.assertEquals(false, gppModel.hasSection(TcfCaV1.NAME)); - } @Test @@ -126,8 +126,6 @@ public void testEncodeDefaultAll() { gppModel.setFieldValue(UsNj.NAME, UsNjField.VERSION, UsNj.VERSION); gppModel.setFieldValue(UsTn.NAME, UsTnField.VERSION, UsTn.VERSION); - - Assertions.assertEquals(true, gppModel.hasSection(TcfEuV2.NAME)); Assertions.assertEquals(true, gppModel.hasSection(TcfCaV1.NAME)); Assertions.assertEquals(true, gppModel.hasSection(UspV1.NAME)); @@ -150,22 +148,26 @@ public void testEncodeDefaultAll() { String gppString = gppModel.encode(); Assertions.assertEquals( - "DBACOdM~CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAAAA.QAAA.IAAA~BPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAA.YAAAAAAAAAA~1---~BAAAAAAAAABA.QA~BAAAAABA.QA~BAAAABA~BAAAAEA.QA~BAAAAAQA~BAAAAAEA.QA~BAAAAABA~BAAAAABA.QA~BAAAAAABAA.QA~BAAAAAQA.QA~BAAAAAABAA.QA~BAAAAAQA.QA~BAAAAAQA.QA~BAAAAABA.QA~BAAAAAAAQA.QA~BAAAAAQA.QA", - gppString); + "DBACOdM~CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAAAA.QAAA.IAAA~BPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAA.YAAAAAAAAAA~1---~BAAAAAAAAABA.QA~BAAAAABA.QA~BAAAABA~BAAAAEA.QA~BAAAAAQA~BAAAAAEA.QA~BAAAAABA~BAAAAABA.QA~BAAAAAABAA.QA~BAAAAAQA.QA~BAAAAAABAA.QA~BAAAAAQA.QA~BAAAAAQA.QA~BAAAAABA.QA~BAAAAAAAQA.QA~BAAAAAQA.QA", + gppString); } @Test public void testDecodingException() { - Assertions.assertThrows(DecodingException.class, () -> { - new GppModel("invalid gpp string").getHeader(); - }); + Assertions.assertThrows( + DecodingException.class, + () -> { + new GppModel("invalid gpp string").getHeader(); + }); } - + @Test() public void testDecodeGarbage() { - Assertions.assertThrows(DecodingException.class, () -> { - new GppModel("z").getUsCtSection(); - }); + Assertions.assertThrows( + DecodingException.class, + () -> { + new GppModel("z").getUsCtSection(); + }); } @Test @@ -192,8 +194,6 @@ public void testEncodeUspv1() { Assertions.assertEquals(false, gppModel.hasSection(TcfEuV2.NAME)); Assertions.assertEquals(false, gppModel.hasSection(TcfCaV1.NAME)); - - String gppString = gppModel.encode(); Assertions.assertEquals("DBABTA~1YNN", gppString); @@ -205,7 +205,6 @@ public void testEncodeUspv1() { Assertions.assertEquals(true, gppModel.hasSection(UspV1.NAME)); Assertions.assertEquals(false, gppModel.hasSection(TcfEuV2.NAME)); Assertions.assertEquals(false, gppModel.hasSection(TcfCaV1.NAME)); - } @Test @@ -241,9 +240,9 @@ public void testEncodeTcfEuV2() { Assertions.assertEquals(true, gppModel.hasSection(TcfEuV2.NAME)); Assertions.assertEquals(false, gppModel.hasSection(TcfCaV1.NAME)); - String gppString = gppModel.encode(); - Assertions.assertEquals("DBABMA~CPSG_8APSG_8ANwAAAENAwCAAAAAAAAAAAAAAAAAAAAA.QAAA.IAAA", gppString); + Assertions.assertEquals( + "DBABMA~CPSG_8APSG_8ANwAAAENAwCAAAAAAAAAAAAAAAAAAAAA.QAAA.IAAA", gppString); Assertions.assertEquals(2, gppString.split("~").length); @@ -255,7 +254,6 @@ public void testEncodeTcfEuV2() { Assertions.assertEquals(false, gppModel.hasSection(UspV1.NAME)); Assertions.assertEquals(true, gppModel.hasSection(TcfEuV2.NAME)); Assertions.assertEquals(false, gppModel.hasSection(TcfCaV1.NAME)); - } @Test @@ -292,7 +290,8 @@ public void testEncodeUspV1AndTcfEuV2() { Assertions.assertEquals(false, gppModel.hasSection(TcfCaV1.NAME)); String gppString = gppModel.encode(); - Assertions.assertEquals("DBACNYA~CPSG_8APSG_8ANwAAAENAwCAAAAAAAAAAAAAAAAAAAAA.QAAA.IAAA~1YNN", gppString); + Assertions.assertEquals( + "DBACNYA~CPSG_8APSG_8ANwAAAENAwCAAAAAAAAAAAAAAAAAAAAA.QAAA.IAAA~1YNN", gppString); Assertions.assertEquals(3, gppString.split("~").length); @@ -300,7 +299,6 @@ public void testEncodeUspV1AndTcfEuV2() { Assertions.assertEquals(true, gppModel.hasSection(UspV1.NAME)); Assertions.assertEquals(true, gppModel.hasSection(TcfEuV2.NAME)); Assertions.assertEquals(false, gppModel.hasSection(TcfCaV1.NAME)); - } @Test @@ -314,7 +312,6 @@ public void testEncodeUspV1AndTcfEuV2AndTcfCaV1() { Assertions.assertEquals(false, gppModel.hasSection(TcfEuV2.NAME)); Assertions.assertEquals(false, gppModel.hasSection(TcfCaV1.NAME)); - gppModel.setFieldValue(TcfEuV2.NAME, TcfEuV2Field.CMP_ID, 880); gppModel.setFieldValue(TcfEuV2.NAME, TcfEuV2Field.CMP_VERSION, 0); gppModel.setFieldValue(TcfEuV2.NAME, TcfEuV2Field.CONSENT_SCREEN, 0); @@ -328,7 +325,6 @@ public void testEncodeUspV1AndTcfEuV2AndTcfCaV1() { gppModel.setFieldValue(TcfEuV2.NAME, TcfEuV2Field.CREATED, utcDateTime); gppModel.setFieldValue(TcfEuV2.NAME, TcfEuV2Field.LAST_UPDATED, utcDateTime); - Assertions.assertEquals(Arrays.asList(2), gppModel.getSectionIds()); Assertions.assertEquals(false, gppModel.hasSection(UspV1.ID)); Assertions.assertEquals(true, gppModel.hasSection(TcfEuV2.ID)); @@ -354,23 +350,34 @@ public void testEncodeUspV1AndTcfEuV2AndTcfCaV1() { gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.CMP_VERSION, 2); gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.VENDOR_LIST_VERSION, 413); gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.USE_NON_STANDARD_STACKS, true); - gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.SPECIAL_FEATURE_EXPRESS_CONSENT, + gppModel.setFieldValue( + TcfCaV1.NAME, + TcfCaV1Field.SPECIAL_FEATURE_EXPRESS_CONSENT, Arrays.asList(6, 7, 8, 9, 10, 11)); - gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.PURPOSES_EXPRESS_CONSENT, + gppModel.setFieldValue( + TcfCaV1.NAME, + TcfCaV1Field.PURPOSES_EXPRESS_CONSENT, Arrays.asList(0, 1, 2, 3, 4, 5, 12, 13, 14, 15, 16, 17)); - gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.PURPOSES_IMPLIED_CONSENT, + gppModel.setFieldValue( + TcfCaV1.NAME, + TcfCaV1Field.PURPOSES_IMPLIED_CONSENT, Arrays.asList(6, 7, 8, 9, 10, 11, 18, 19, 20, 21, 22, 23)); - gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.VENDOR_EXPRESS_CONSENT, Arrays.asList(12, 24, 48)); - gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.VENDOR_IMPLIED_CONSENT, Arrays.asList(18, 30)); - gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.PUB_PURPOSES_EXPRESS_CONSENT, + gppModel.setFieldValue( + TcfCaV1.NAME, TcfCaV1Field.VENDOR_EXPRESS_CONSENT, Arrays.asList(12, 24, 48)); + gppModel.setFieldValue( + TcfCaV1.NAME, TcfCaV1Field.VENDOR_IMPLIED_CONSENT, Arrays.asList(18, 30)); + gppModel.setFieldValue( + TcfCaV1.NAME, + TcfCaV1Field.PUB_PURPOSES_EXPRESS_CONSENT, Arrays.asList(0, 1, 2, 6, 7, 8, 12, 13, 14, 18, 19, 20)); - gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.PUB_PURPOSES_IMPLIED_CONSENT, + gppModel.setFieldValue( + TcfCaV1.NAME, + TcfCaV1Field.PUB_PURPOSES_IMPLIED_CONSENT, Arrays.asList(3, 4, 5, 9, 10, 11, 15, 16, 17, 21, 22, 23)); gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.NUM_CUSTOM_PURPOSES, 3); - gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.CUSTOM_PURPOSES_EXPRESS_CONSENT, - List.of(1)); - gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.CUSTOM_PURPOSES_IMPLIED_CONSENT, - List.of(0,2)); + gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.CUSTOM_PURPOSES_EXPRESS_CONSENT, List.of(1)); + gppModel.setFieldValue( + TcfCaV1.NAME, TcfCaV1Field.CUSTOM_PURPOSES_IMPLIED_CONSENT, List.of(0, 2)); gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.CREATED, utcDateTime); gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.LAST_UPDATED, utcDateTime); @@ -383,7 +390,6 @@ public void testEncodeUspV1AndTcfEuV2AndTcfCaV1() { Assertions.assertEquals(true, gppModel.hasSection(TcfEuV2.NAME)); Assertions.assertEquals(true, gppModel.hasSection(TcfCaV1.NAME)); - String gppString = gppModel.encode(); Assertions.assertEquals( "DBACOeA~CPSG_8APSG_8ANwAAAENAwCAAAAAAAAAAAAAAAAAAAAA.QAAA.IAAA~BPSG_8APSG_8AAyACAENGdCgf_gfgAfgfgBgABABAAABAB4AACACAAA.fHHHA4444ao~1YNN", @@ -413,7 +419,6 @@ public void testDecodeDefaults() { Assertions.assertEquals(false, gppModel.hasSection(UspV1.NAME)); Assertions.assertEquals(false, gppModel.hasSection(TcfEuV2.NAME)); Assertions.assertEquals(false, gppModel.hasSection(TcfCaV1.NAME)); - } @Test @@ -484,29 +489,44 @@ public void testDecodeTcfEuV2() { Assertions.assertEquals(880, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.CMP_ID)); Assertions.assertEquals(0, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.CMP_VERSION)); Assertions.assertEquals(0, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.CONSENT_SCREEN)); - Assertions.assertEquals("EN", gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.CONSENT_LANGUAGE)); - Assertions.assertEquals(48, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.VENDOR_LIST_VERSION)); + Assertions.assertEquals( + "EN", gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.CONSENT_LANGUAGE)); + Assertions.assertEquals( + 48, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.VENDOR_LIST_VERSION)); Assertions.assertEquals(2, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.POLICY_VERSION)); - Assertions.assertEquals(false, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.IS_SERVICE_SPECIFIC)); - Assertions.assertEquals(false, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.USE_NON_STANDARD_STACKS)); - Assertions.assertEquals(false, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.PURPOSE_ONE_TREATMENT)); - Assertions.assertEquals("AA", gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.PUBLISHER_COUNTRY_CODE)); + Assertions.assertEquals( + false, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.IS_SERVICE_SPECIFIC)); + Assertions.assertEquals( + false, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.USE_NON_STANDARD_STACKS)); + Assertions.assertEquals( + false, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.PURPOSE_ONE_TREATMENT)); + Assertions.assertEquals( + "AA", gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.PUBLISHER_COUNTRY_CODE)); Assertions.assertEquals(utcDateTime, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.CREATED)); - Assertions.assertEquals(utcDateTime, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.LAST_UPDATED)); + Assertions.assertEquals( + utcDateTime, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.LAST_UPDATED)); Assertions.assertEquals(2, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.VERSION)); Assertions.assertEquals(880, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.CMP_ID)); Assertions.assertEquals(0, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.CMP_VERSION)); Assertions.assertEquals(0, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.CONSENT_SCREEN)); - Assertions.assertEquals("EN", gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.CONSENT_LANGUAGE)); - Assertions.assertEquals(48, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.VENDOR_LIST_VERSION)); + Assertions.assertEquals( + "EN", gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.CONSENT_LANGUAGE)); + Assertions.assertEquals( + 48, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.VENDOR_LIST_VERSION)); Assertions.assertEquals(2, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.POLICY_VERSION)); - Assertions.assertEquals(false, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.IS_SERVICE_SPECIFIC)); - Assertions.assertEquals(false, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.USE_NON_STANDARD_STACKS)); - Assertions.assertEquals(false, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.PURPOSE_ONE_TREATMENT)); - Assertions.assertEquals("AA", gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.PUBLISHER_COUNTRY_CODE)); - Assertions.assertEquals(utcDateTime, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.CREATED)); - Assertions.assertEquals(utcDateTime, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.LAST_UPDATED)); + Assertions.assertEquals( + false, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.IS_SERVICE_SPECIFIC)); + Assertions.assertEquals( + false, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.USE_NON_STANDARD_STACKS)); + Assertions.assertEquals( + false, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.PURPOSE_ONE_TREATMENT)); + Assertions.assertEquals( + "AA", gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.PUBLISHER_COUNTRY_CODE)); + Assertions.assertEquals( + utcDateTime, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.CREATED)); + Assertions.assertEquals( + utcDateTime, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.LAST_UPDATED)); } @Test @@ -523,7 +543,6 @@ public void testDecodeUspv1AndTcfEuV2() { Assertions.assertEquals(true, gppModel.hasSection(TcfEuV2.NAME)); Assertions.assertEquals(false, gppModel.hasSection(TcfCaV1.NAME)); - Assertions.assertEquals('Y', gppModel.getFieldValue(UspV1.ID, UspV1Field.NOTICE)); Assertions.assertEquals('N', gppModel.getFieldValue(UspV1.ID, UspV1Field.OPT_OUT_SALE)); Assertions.assertEquals('N', gppModel.getFieldValue(UspV1.ID, UspV1Field.LSPA_COVERED)); @@ -536,29 +555,44 @@ public void testDecodeUspv1AndTcfEuV2() { Assertions.assertEquals(880, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.CMP_ID)); Assertions.assertEquals(0, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.CMP_VERSION)); Assertions.assertEquals(0, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.CONSENT_SCREEN)); - Assertions.assertEquals("EN", gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.CONSENT_LANGUAGE)); - Assertions.assertEquals(48, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.VENDOR_LIST_VERSION)); + Assertions.assertEquals( + "EN", gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.CONSENT_LANGUAGE)); + Assertions.assertEquals( + 48, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.VENDOR_LIST_VERSION)); Assertions.assertEquals(2, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.POLICY_VERSION)); - Assertions.assertEquals(false, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.IS_SERVICE_SPECIFIC)); - Assertions.assertEquals(false, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.USE_NON_STANDARD_STACKS)); - Assertions.assertEquals(false, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.PURPOSE_ONE_TREATMENT)); - Assertions.assertEquals("AA", gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.PUBLISHER_COUNTRY_CODE)); + Assertions.assertEquals( + false, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.IS_SERVICE_SPECIFIC)); + Assertions.assertEquals( + false, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.USE_NON_STANDARD_STACKS)); + Assertions.assertEquals( + false, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.PURPOSE_ONE_TREATMENT)); + Assertions.assertEquals( + "AA", gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.PUBLISHER_COUNTRY_CODE)); Assertions.assertEquals(utcDateTime, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.CREATED)); - Assertions.assertEquals(utcDateTime, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.LAST_UPDATED)); + Assertions.assertEquals( + utcDateTime, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.LAST_UPDATED)); Assertions.assertEquals(2, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.VERSION)); Assertions.assertEquals(880, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.CMP_ID)); Assertions.assertEquals(0, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.CMP_VERSION)); Assertions.assertEquals(0, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.CONSENT_SCREEN)); - Assertions.assertEquals("EN", gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.CONSENT_LANGUAGE)); - Assertions.assertEquals(48, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.VENDOR_LIST_VERSION)); + Assertions.assertEquals( + "EN", gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.CONSENT_LANGUAGE)); + Assertions.assertEquals( + 48, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.VENDOR_LIST_VERSION)); Assertions.assertEquals(2, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.POLICY_VERSION)); - Assertions.assertEquals(false, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.IS_SERVICE_SPECIFIC)); - Assertions.assertEquals(false, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.USE_NON_STANDARD_STACKS)); - Assertions.assertEquals(false, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.PURPOSE_ONE_TREATMENT)); - Assertions.assertEquals("AA", gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.PUBLISHER_COUNTRY_CODE)); - Assertions.assertEquals(utcDateTime, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.CREATED)); - Assertions.assertEquals(utcDateTime, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.LAST_UPDATED)); + Assertions.assertEquals( + false, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.IS_SERVICE_SPECIFIC)); + Assertions.assertEquals( + false, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.USE_NON_STANDARD_STACKS)); + Assertions.assertEquals( + false, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.PURPOSE_ONE_TREATMENT)); + Assertions.assertEquals( + "AA", gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.PUBLISHER_COUNTRY_CODE)); + Assertions.assertEquals( + utcDateTime, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.CREATED)); + Assertions.assertEquals( + utcDateTime, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.LAST_UPDATED)); TcfEuV2 tcfEuV2Section = (TcfEuV2) gppModel.getSection(TcfEuV2.NAME); Integer tcfEuV2Version = tcfEuV2Section.getVersion(); @@ -592,15 +626,23 @@ public void testDecodeUspv1AndTcfEuV2AndTcfCaV1() { Assertions.assertEquals(880, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.CMP_ID)); Assertions.assertEquals(0, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.CMP_VERSION)); Assertions.assertEquals(0, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.CONSENT_SCREEN)); - Assertions.assertEquals("EN", gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.CONSENT_LANGUAGE)); - Assertions.assertEquals(48, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.VENDOR_LIST_VERSION)); + Assertions.assertEquals( + "EN", gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.CONSENT_LANGUAGE)); + Assertions.assertEquals( + 48, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.VENDOR_LIST_VERSION)); Assertions.assertEquals(2, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.POLICY_VERSION)); - Assertions.assertEquals(false, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.IS_SERVICE_SPECIFIC)); - Assertions.assertEquals(false, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.USE_NON_STANDARD_STACKS)); - Assertions.assertEquals(false, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.PURPOSE_ONE_TREATMENT)); - Assertions.assertEquals("AA", gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.PUBLISHER_COUNTRY_CODE)); - Assertions.assertEquals(utcDateTime, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.CREATED)); - Assertions.assertEquals(utcDateTime, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.LAST_UPDATED)); + Assertions.assertEquals( + false, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.IS_SERVICE_SPECIFIC)); + Assertions.assertEquals( + false, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.USE_NON_STANDARD_STACKS)); + Assertions.assertEquals( + false, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.PURPOSE_ONE_TREATMENT)); + Assertions.assertEquals( + "AA", gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.PUBLISHER_COUNTRY_CODE)); + Assertions.assertEquals( + utcDateTime, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.CREATED)); + Assertions.assertEquals( + utcDateTime, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.LAST_UPDATED)); TcfEuV2 tcfEuV2Section = (TcfEuV2) gppModel.getSection(TcfEuV2.NAME); Integer tcfEuV2Version = tcfEuV2Section.getVersion(); @@ -619,27 +661,24 @@ public void testDecodeUspv1AndTcfEuV2AndTcfCaV1() { Assertions.assertEquals(2, tcfCaV1Section.getCmpVersion()); Assertions.assertEquals(413, tcfCaV1Section.getVendorListVersion()); Assertions.assertEquals(true, tcfCaV1Section.getUseNonStandardStacks()); - Assertions.assertTrue(tcfCaV1Section.getSpecialFeatureExpressConsent().intStream().anyMatch(x -> x== 7)); - Assertions.assertEquals(Set.of(7, 8, 9, 10, 11, 12), - tcfCaV1Section.getSpecialFeatureExpressConsent()); - Assertions - .assertEquals( - Set.of(1, 2, 3, 4, 5, 6, 13, 14, 15, 16, 17, 18), - tcfCaV1Section.getPurposesExpressConsent()); - Assertions - .assertEquals( - Set.of(7, 8, 9, 10, 11, 12, 19, 20, 21, 22, 23, 24), - tcfCaV1Section.getPurposesImpliedConsent()); + Assertions.assertTrue( + tcfCaV1Section.getSpecialFeatureExpressConsent().intStream().anyMatch(x -> x == 7)); + Assertions.assertEquals( + Set.of(7, 8, 9, 10, 11, 12), tcfCaV1Section.getSpecialFeatureExpressConsent()); + Assertions.assertEquals( + Set.of(1, 2, 3, 4, 5, 6, 13, 14, 15, 16, 17, 18), + tcfCaV1Section.getPurposesExpressConsent()); + Assertions.assertEquals( + Set.of(7, 8, 9, 10, 11, 12, 19, 20, 21, 22, 23, 24), + tcfCaV1Section.getPurposesImpliedConsent()); Assertions.assertEquals(Set.of(12, 24, 48), tcfCaV1Section.getVendorExpressConsent()); Assertions.assertEquals(Set.of(18, 30), tcfCaV1Section.getVendorImpliedConsent()); - Assertions - .assertEquals( - Set.of(1, 2, 3, 7, 8, 9, 13, 14, 15, 19, 20, 21), - tcfCaV1Section.getPubPurposesExpressConsent()); - Assertions - .assertEquals( - Set.of(4, 5, 6, 10, 11, 12, 16, 17, 18, 22, 23, 24), - tcfCaV1Section.getPubPurposesImpliedConsent()); + Assertions.assertEquals( + Set.of(1, 2, 3, 7, 8, 9, 13, 14, 15, 19, 20, 21), + tcfCaV1Section.getPubPurposesExpressConsent()); + Assertions.assertEquals( + Set.of(4, 5, 6, 10, 11, 12, 16, 17, 18, 22, 23, 24), + tcfCaV1Section.getPubPurposesImpliedConsent()); Assertions.assertEquals(3, tcfCaV1Section.getNumCustomPurposes()); Assertions.assertEquals(Set.of(2), tcfCaV1Section.getCustomPurposesExpressConsent()); Assertions.assertEquals(Set.of(1, 3), tcfCaV1Section.getCustomPurposesImpliedConsent()); @@ -662,7 +701,8 @@ public void testEncode1() { Assertions.assertEquals(true, gppModel.getTcfEuV2Section().hasField(TcfEuV2Field.VERSION)); gppModel.toString(); - Assertions.assertEquals("DBABMA~CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAOAAAABAAAAA.QAAA.IAAA", gppModel.encode()); + Assertions.assertEquals( + "DBABMA~CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAOAAAABAAAAA.QAAA.IAAA", gppModel.encode()); } @Test @@ -673,7 +713,8 @@ public void testEncode2() { gppModel.setFieldValue(TcfEuV2.NAME, TcfEuV2Field.CREATED, utcDateTime); gppModel.setFieldValue(TcfEuV2.NAME, TcfEuV2Field.LAST_UPDATED, utcDateTime); - Assertions.assertEquals("DBABMA~CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAOwAQAOgAAAA.QAAA.IAAA", gppModel.encode()); + Assertions.assertEquals( + "DBABMA~CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAOwAQAOgAAAA.QAAA.IAAA", gppModel.encode()); } @Test @@ -684,34 +725,39 @@ public void testEncode3() { gppModel.setFieldValue(TcfEuV2.NAME, TcfEuV2Field.CREATED, utcDateTime); gppModel.setFieldValue(TcfEuV2.NAME, TcfEuV2Field.LAST_UPDATED, utcDateTime); - Assertions.assertEquals("DBABMA~CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAFpQAwAAgCtAWkAAAAAAA.QAAA.IAAA", + Assertions.assertEquals( + "DBABMA~CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAFpQAwAAgCtAWkAAAAAAA.QAAA.IAAA", gppModel.encode()); } @Test public void testDecode1() { - GppModel gppModel = new GppModel("DBABMA~CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAOAAAABAAAAA.QAAA.IAAA"); - Assertions.assertEquals(Set.of(28), gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.VENDOR_CONSENTS)); + GppModel gppModel = + new GppModel("DBABMA~CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAOAAAABAAAAA.QAAA.IAAA"); + Assertions.assertEquals( + Set.of(28), gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.VENDOR_CONSENTS)); } @Test public void testDecode2() { - GppModel gppModel = new GppModel("DBABMA~CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAOwAQAOgAAAA.QAAA.IAAA"); - Assertions.assertEquals(Set.of(29), gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.VENDOR_CONSENTS)); + GppModel gppModel = + new GppModel("DBABMA~CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAOwAQAOgAAAA.QAAA.IAAA"); + Assertions.assertEquals( + Set.of(29), gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.VENDOR_CONSENTS)); } @Test public void testDecode3() { - GppModel gppModel = new GppModel("DBABMA~CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAFpQAwAAgCtAWkAAAAAAA.QAAA.IAAA"); - Assertions.assertEquals(Set.of(1, 173, 722), - gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.VENDOR_CONSENTS)); + GppModel gppModel = + new GppModel("DBABMA~CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAFpQAwAAgCtAWkAAAAAAA.QAAA.IAAA"); + Assertions.assertEquals( + Set.of(1, 173, 722), gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.VENDOR_CONSENTS)); } - + @Test public void testDecode4() { GppModel gppModel = new GppModel("DBABTA~1YYN"); gppModel.getFieldValue(UspV1.NAME, UspV1Field.VERSION); - } @Test @@ -719,57 +765,68 @@ public void testDecode5() { GppModel gppModel = new GppModel("DBABLA~BVQqAAAAAgA.QA"); gppModel.getFieldValue(UsNat.NAME, UsNatField.VERSION); } - + @Test public void testDecode6() { GppModel gppModel = new GppModel("DBABLA~BAAAAAAAAQA.QA"); gppModel.getFieldValue(UsNat.NAME, UsNatField.VERSION); - Assertions.assertEquals(Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), + Assertions.assertEquals( + Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), gppModel.getFieldValue(UsNat.NAME, UsNatField.SENSITIVE_DATA_PROCESSING)); - Assertions.assertEquals(Arrays.asList(0, 0, 0), + Assertions.assertEquals( + Arrays.asList(0, 0, 0), gppModel.getFieldValue(UsNat.NAME, UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS)); } - + @Test public void testDecode7() { GppModel gppModel = new GppModel("DBABLA~BAAAAAAAAABA.QA"); gppModel.getFieldValue(UsNat.NAME, UsNatField.VERSION); - Assertions.assertEquals(Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), + Assertions.assertEquals( + Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), gppModel.getFieldValue(UsNat.NAME, UsNatField.SENSITIVE_DATA_PROCESSING)); - Assertions.assertEquals(Arrays.asList(0, 0, 0), + Assertions.assertEquals( + Arrays.asList(0, 0, 0), gppModel.getFieldValue(UsNat.NAME, UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS)); } - + @Test public void testDecode8() { GppModel gppModel = new GppModel("DBABLA~BAAAAAABEQA.QA"); gppModel.getFieldValue(UsNat.NAME, UsNatField.VERSION); - Assertions.assertEquals(Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0), + Assertions.assertEquals( + Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0), gppModel.getFieldValue(UsNat.NAME, UsNatField.SENSITIVE_DATA_PROCESSING)); - Assertions.assertEquals(Arrays.asList(0, 1, 0), + Assertions.assertEquals( + Arrays.asList(0, 1, 0), gppModel.getFieldValue(UsNat.NAME, UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS)); } - + @Test public void testDecode9() { GppModel gppModel = new GppModel("DBABLA~BAAAAAAAAQRA.QA"); gppModel.getFieldValue(UsNat.NAME, UsNatField.VERSION); - Assertions.assertEquals(Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1), + Assertions.assertEquals( + Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1), gppModel.getFieldValue(UsNat.NAME, UsNatField.SENSITIVE_DATA_PROCESSING)); - Assertions.assertEquals(Arrays.asList(0, 0, 1), + Assertions.assertEquals( + Arrays.asList(0, 0, 1), gppModel.getFieldValue(UsNat.NAME, UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS)); } - + @Test public void testConsistency() { GppModel fromObjectModel = new GppModel(); - fromObjectModel.setFieldValue(TcfEuV2.NAME, TcfEuV2Field.PURPOSE_CONSENTS, - Arrays.asList(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)); - fromObjectModel.setFieldValue(TcfEuV2.NAME, TcfEuV2Field.VENDOR_CONSENTS, + fromObjectModel.setFieldValue( + TcfEuV2.NAME, TcfEuV2Field.PURPOSE_CONSENTS, Arrays.asList(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)); + fromObjectModel.setFieldValue( + TcfEuV2.NAME, + TcfEuV2Field.VENDOR_CONSENTS, Arrays.asList(32, 128, 81, 210, 755, 21, 173, 238)); - Assertions.assertEquals(fromObjectModel.getSection(TcfEuV2.NAME).encode(), + Assertions.assertEquals( + fromObjectModel.getSection(TcfEuV2.NAME).encode(), fromObjectModel.getSection(TcfEuV2.NAME).encode()); Assertions.assertEquals(fromObjectModel.encode(), fromObjectModel.encode()); @@ -778,9 +835,9 @@ public void testConsistency() { Assertions.assertEquals( Set.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), decodedModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.PURPOSE_CONSENTS)); - Assertions.assertEquals(Set.of(21, 32, 81, 128, 173, 210, 238, 755), + Assertions.assertEquals( + Set.of(21, 32, 81, 128, 173, 210, 238, 755), decodedModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.VENDOR_CONSENTS)); - } @Test @@ -828,13 +885,13 @@ public void testDecodingEmptyString() { @Test public void testDecodingExceptionValidStringButNotGPP() { try { - GppModel gppModel = new GppModel("DP48G0AP48G0AEsACCPLAkEgAAAAAEPgAB5YAAAQaQD2F2K2kKFkPCmQWYAQBCijYEAhQAAAAkCBIAAgAUgQAgFIIAgAIFAAAAAAAAAQEgCQAAQABAAAIACgAAAAAAIAAAAAAAQQAAAAAIAAAAAAAAEAAAAAAAQAAAAIAABEhCAAQQAEAAAAAAAQAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAgAA"); + GppModel gppModel = + new GppModel( + "DP48G0AP48G0AEsACCPLAkEgAAAAAEPgAB5YAAAQaQD2F2K2kKFkPCmQWYAQBCijYEAhQAAAAkCBIAAgAUgQAgFIIAgAIFAAAAAAAAAQEgCQAAQABAAAIACgAAAAAAIAAAAAAAQQAAAAAIAAAAAAAAEAAAAAAAQAAAAIAABEhCAAQQAEAAAAAAAQAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAgAA"); gppModel.getHeader().getName(); Assertions.fail("Expected LazyDecodingException"); } catch (DecodingException e) { } } - - } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoderTest.java index e9821ca9..255cdc90 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoderTest.java @@ -7,21 +7,25 @@ public class TraditionalBase64UrlEncoderTest { private TraditionalBase64UrlEncoder base64UrlEncoder = TraditionalBase64UrlEncoder.getInstance(); - - @Test public void testDecode1() { - Assertions.assertEquals("000011000001000000000001001100000000000000000000", base64UrlEncoder.decode("DBABMAAA").toString()); + Assertions.assertEquals( + "000011000001000000000001001100000000000000000000", + base64UrlEncoder.decode("DBABMAAA").toString()); } @Test public void testDecode2() { - Assertions.assertEquals("000011000001000000000010001101011000000000000000", base64UrlEncoder.decode("DBACNYAA").toString()); + Assertions.assertEquals( + "000011000001000000000010001101011000000000000000", + base64UrlEncoder.decode("DBACNYAA").toString()); } @Test public void testDecode3() { - Assertions.assertEquals("000011000001000000000001100011110000000000000000", base64UrlEncoder.decode("DBABjwAA").toString()); + Assertions.assertEquals( + "000011000001000000000001100011110000000000000000", + base64UrlEncoder.decode("DBABjwAA").toString()); } @Test @@ -41,5 +45,4 @@ public void testDifferingLengthDecodes() { Assertions.assertEquals(out.toString(), base64UrlEncoder.decode(in.toString()).toString()); } } - } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/DirtyableListTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/DirtyableListTest.java index dbbc28b0..4f1a9e84 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/DirtyableListTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/DirtyableListTest.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.datatype; import static org.junit.jupiter.api.Assertions.*; + import java.util.List; import java.util.Set; import org.junit.jupiter.api.Test; @@ -9,9 +10,9 @@ class DirtyableListTest { @Test void test() { - RangeEntry item1 = new RangeEntry(1, 2, Set.of(3,4,5)); - RangeEntry item2 = new RangeEntry(6, 7, Set.of(8,9,10)); - RangeEntry item3 = new RangeEntry(11, 12, Set.of(13,14,15)); + RangeEntry item1 = new RangeEntry(1, 2, Set.of(3, 4, 5)); + RangeEntry item2 = new RangeEntry(6, 7, Set.of(8, 9, 10)); + RangeEntry item3 = new RangeEntry(11, 12, Set.of(13, 14, 15)); DirtyableList list = new DirtyableList<>(); list.add(item1); list.addAll(List.of(item2, item3)); @@ -26,7 +27,7 @@ void test() { assertFalse(list.isDirty()); item2.getIds().remove(9); assertTrue(list.isDirty()); - RangeEntry item2a = new RangeEntry(100, 200, Set.of(300,400,500)); + RangeEntry item2a = new RangeEntry(100, 200, Set.of(300, 400, 500)); assertEquals(item2, list.set(1, item2a)); assertEquals(item2a, list.get(1)); assertEquals(item3, list.remove(2)); @@ -34,5 +35,4 @@ void test() { list.add(item3); assertEquals(List.of(item1, item2a, item3), list); } - } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java index d64fbae6..6b5996a3 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java @@ -1,19 +1,19 @@ package com.iab.gpp.encoder.datatype; -import java.util.Set; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.field.UsNatField; +import java.util.Set; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; public class EncodableFixedIntegerRangeTest { @Test public void testEncode1() throws EncodingException { - EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange<>(""); + EncodableFixedIntegerRange encodableFixedIntegerRange = + new EncodableFixedIntegerRange<>(""); IntegerSet integerSet = new IntegerSet(); integerSet.add(28); BitString builder = new BitString(); @@ -23,7 +23,8 @@ public void testEncode1() throws EncodingException { @Test public void testEncode2() throws EncodingException { - EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange<>(""); + EncodableFixedIntegerRange encodableFixedIntegerRange = + new EncodableFixedIntegerRange<>(""); IntegerSet integerSet = new IntegerSet(); integerSet.add(29); BitString builder = new BitString(); @@ -33,14 +34,19 @@ public void testEncode2() throws EncodingException { @Test public void testDecode1() throws DecodingException { - EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange<>(""); - Assertions.assertEquals(Set.of(28), encodableFixedIntegerRange.decode(BitString.of("00000000000100000000000011100"), null)); + EncodableFixedIntegerRange encodableFixedIntegerRange = + new EncodableFixedIntegerRange<>(""); + Assertions.assertEquals( + Set.of(28), + encodableFixedIntegerRange.decode(BitString.of("00000000000100000000000011100"), null)); } @Test public void testDecode2() throws DecodingException { - EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange<>(""); - Assertions.assertEquals(Set.of(29), encodableFixedIntegerRange.decode(BitString.of("00000000000100000000000011101"), null)); + EncodableFixedIntegerRange encodableFixedIntegerRange = + new EncodableFixedIntegerRange<>(""); + Assertions.assertEquals( + Set.of(29), + encodableFixedIntegerRange.decode(BitString.of("00000000000100000000000011101"), null)); } - } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java index d527d26e..9245ad34 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java @@ -1,16 +1,16 @@ package com.iab.gpp.encoder.datatype; +import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.field.UsNatField; import java.util.Arrays; import java.util.Set; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.field.UsNatField; - public class EncodableOptimizedFixedRangeTest { - private EncodableOptimizedFixedRange encodableOptimizedFixedRange = new EncodableOptimizedFixedRange<>(""); + private EncodableOptimizedFixedRange encodableOptimizedFixedRange = + new EncodableOptimizedFixedRange<>(""); @Test public void testEncode1() { @@ -18,8 +18,8 @@ public void testEncode1() { integerSet.addAll(Arrays.asList(12, 24, 48)); BitString builder = new BitString(); encodableOptimizedFixedRange.encode(builder, integerSet, null); - Assertions.assertEquals("00000000001100000000000000001000000000001000000000000000000000001", - builder.toString()); + Assertions.assertEquals( + "00000000001100000000000000001000000000001000000000000000000000001", builder.toString()); } @Test @@ -51,21 +51,34 @@ public void testEncode4() { @Test public void testDecode1() { - Assertions.assertEquals(Set.of(12, 24, 48), encodableOptimizedFixedRange.decode(BitString.of("00000000001100000000000000001000000000001000000000000000000000001"), null)); + Assertions.assertEquals( + Set.of(12, 24, 48), + encodableOptimizedFixedRange.decode( + BitString.of("00000000001100000000000000001000000000001000000000000000000000001"), + null)); } @Test public void testDecode2() { - Assertions.assertEquals(Set.of(18, 30), encodableOptimizedFixedRange.decode(BitString.of("00000000000111100000000000000000001000000000001"), null)); + Assertions.assertEquals( + Set.of(18, 30), + encodableOptimizedFixedRange.decode( + BitString.of("00000000000111100000000000000000001000000000001"), null)); } @Test public void testDecode3() { - Assertions.assertEquals(Set.of(28), encodableOptimizedFixedRange.decode(BitString.of("000000000001110000000000000000000000000000001"), null)); + Assertions.assertEquals( + Set.of(28), + encodableOptimizedFixedRange.decode( + BitString.of("000000000001110000000000000000000000000000001"), null)); } @Test public void testDecode4() { - Assertions.assertEquals(Set.of(29), encodableOptimizedFixedRange.decode(BitString.of("0000000000011101100000000000100000000000011101"), null)); + Assertions.assertEquals( + Set.of(29), + encodableOptimizedFixedRange.decode( + BitString.of("0000000000011101100000000000100000000000011101"), null)); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListEncoderTest.java index 360cd604..9ab09f75 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListEncoderTest.java @@ -1,15 +1,14 @@ package com.iab.gpp.encoder.datatype; -import java.util.ArrayList; -import java.util.Arrays; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerListEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.field.UsNatField; +import java.util.ArrayList; +import java.util.Arrays; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; public class FixedIntegerListEncoderTest { @@ -151,7 +150,8 @@ public void testEncode19() { } private FixedIntegerList decode(String str) { - EncodableFixedIntegerList encodable = new EncodableFixedIntegerList<>("", 2, 2, null); + EncodableFixedIntegerList encodable = + new EncodableFixedIntegerList<>("", 2, 2, null); return encodable.decode(BitString.of(str), null); } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListTest.java index 69b27b10..a8ab9eca 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListTest.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.datatype; import static org.junit.jupiter.api.Assertions.*; + import java.util.List; import org.junit.jupiter.api.Test; @@ -18,7 +19,7 @@ void test() { assertThrows(IllegalArgumentException.class, () -> list.set(4, 128)); assertThrows(IllegalArgumentException.class, () -> list.set(4, -1)); assertEquals(5, list.size()); - assertEquals(List.of(2,1,5,8,3), list); + assertEquals(List.of(2, 1, 5, 8, 3), list); assertEquals(2, list.get(0)); assertEquals(1, list.get(1)); assertEquals(5, list.get(2)); @@ -28,5 +29,4 @@ void test() { list.setDirty(false); assertFalse(list.isDirty()); } - } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoderTest.java index d755cb51..0dcbd37c 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoderTest.java @@ -1,10 +1,9 @@ package com.iab.gpp.encoder.datatype.encoder; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; public class BooleanEncoderTest { @@ -51,5 +50,4 @@ public void testDecode4() { } } - } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoderTest.java index 7e35100d..652e9644 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoderTest.java @@ -1,12 +1,11 @@ package com.iab.gpp.encoder.datatype.encoder; +import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.error.DecodingException; import java.time.Instant; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.error.DecodingException; - public class DatetimeEncoderTest { @Test diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java index 103e7545..54b4c8e5 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java @@ -1,11 +1,10 @@ package com.iab.gpp.encoder.datatype.encoder; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; public class FibonacciIntegerEncoderTest { @@ -61,8 +60,8 @@ public void testEncode7() { @Test public void testEncodeTooLarge() { BitString builder = new BitString(); - Assertions.assertThrows(EncodingException.class, () -> - builder.writeFibonacci(Integer.MAX_VALUE)); + Assertions.assertThrows( + EncodingException.class, () -> builder.writeFibonacci(Integer.MAX_VALUE)); } private int decode(String str) { @@ -106,8 +105,7 @@ public void testDecode7() throws DecodingException { @Test public void testDecodeTooLarge() { - Assertions.assertThrows(DecodingException.class, () -> - decode("0001010001000101001000001001000100001000100011")); + Assertions.assertThrows( + DecodingException.class, () -> decode("0001010001000101001000001001000100001000100011")); } - } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java index 24905960..15296f02 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java @@ -1,15 +1,14 @@ package com.iab.gpp.encoder.datatype.encoder; +import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.datatype.IntegerSet; +import com.iab.gpp.encoder.error.DecodingException; import java.util.ArrayList; import java.util.Arrays; import java.util.Set; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.datatype.IntegerSet; -import com.iab.gpp.encoder.error.DecodingException; - public class FibonacciIntegerRangeEncoderTest { @Test @@ -62,7 +61,7 @@ public void testEncode7() { FibonacciIntegerRangeEncoder.encode(builder, Arrays.asList(2, 5, 6, 7, 8, 9, 10, 11, 12)); Assertions.assertEquals("00000000001000111001101011", builder.toString()); } - + private IntegerSet decode(String str) { return FibonacciIntegerRangeEncoder.decode(BitString.of(str)); } @@ -89,14 +88,13 @@ public void testDecode4() throws DecodingException { @Test public void testDecode5() throws DecodingException { - Assertions.assertEquals(Set.of(3, 5, 6, 7, 8), - decode("0000000000100001110110011")); + Assertions.assertEquals(Set.of(3, 5, 6, 7, 8), decode("0000000000100001110110011")); } @Test public void testDecode6() throws DecodingException { - Assertions.assertEquals(Set.of(2, 5, 6, 7, 8, 9, 10, 11, 12), - decode("00000000001000111001101011")); + Assertions.assertEquals( + Set.of(2, 5, 6, 7, 8, 9, 10, 11, 12), decode("00000000001000111001101011")); } @Test diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java index 45a2feb0..e8ea82e7 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java @@ -1,12 +1,11 @@ package com.iab.gpp.encoder.datatype.encoder; -import java.util.Set; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; +import java.util.Set; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; public class FixedBitfieldEncoderTest { @@ -74,17 +73,17 @@ public void testEncode7() { @Test public void testEncode8() { IntegerSet set = new IntegerSet(5); - for(int i = 0; i <= 10; i++) { + for (int i = 0; i <= 10; i++) { set.addInt(i); } - Assertions.assertEquals(Set.of(0,1,2,3,4), set); + Assertions.assertEquals(Set.of(0, 1, 2, 3, 4), set); } @Test public void testEncode9() { IntegerSet set = new IntegerSet(5); - set.addRange(0,10); - Assertions.assertEquals(Set.of(0,1,2,3,4), set); + set.addRange(0, 10); + Assertions.assertEquals(Set.of(0, 1, 2, 3, 4), set); } private IntegerSet decode(String str) { diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoderTest.java index d1fbbb47..ff6f8035 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoderTest.java @@ -1,11 +1,10 @@ package com.iab.gpp.encoder.datatype.encoder; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; public class FixedIntegerEncoderTest { @@ -43,7 +42,7 @@ public void testEncode5() { builder.writeInt(7, 8); Assertions.assertEquals("00000111", builder.toString()); } - + @Test public void testEncode6() { try { diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java index 7d76b98f..d8a9f8c3 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java @@ -1,15 +1,14 @@ package com.iab.gpp.encoder.datatype.encoder; +import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.datatype.IntegerSet; +import com.iab.gpp.encoder.error.DecodingException; import java.util.ArrayList; import java.util.Arrays; import java.util.Set; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.datatype.IntegerSet; -import com.iab.gpp.encoder.error.DecodingException; - public class FixedIntegerRangeEncoderTest { @Test @@ -30,16 +29,15 @@ public void testEncode2() { public void testEncode3() { BitString builder = new BitString(); FixedIntegerRangeEncoder.encode(builder, Arrays.asList(2, 3, 4, 5, 6)); - Assertions.assertEquals("000000000001100000000000000100000000000000110", - builder.toString()); + Assertions.assertEquals("000000000001100000000000000100000000000000110", builder.toString()); } @Test public void testEncode4() { BitString builder = new BitString(); FixedIntegerRangeEncoder.encode(builder, Arrays.asList(2, 5, 6, 7)); - Assertions.assertEquals("00000000001000000000000000010100000000000001010000000000000111", - builder.toString()); + Assertions.assertEquals( + "00000000001000000000000000010100000000000001010000000000000111", builder.toString()); } @Test @@ -48,31 +46,32 @@ public void testEncode5() { IntegerSet set = new IntegerSet(); set.addAll(Arrays.asList(6, 7, 2, 5)); FixedIntegerRangeEncoder.encode(builder, set); - Assertions.assertEquals("00000000001000000000000000010100000000000001010000000000000111", - builder.toString()); + Assertions.assertEquals( + "00000000001000000000000000010100000000000001010000000000000111", builder.toString()); } @Test public void testEncode6() { BitString builder = new BitString(); FixedIntegerRangeEncoder.encode(builder, Arrays.asList(3, 5, 6, 7, 8)); - Assertions.assertEquals("00000000001000000000000000011100000000000001010000000000001000", - builder.toString()); + Assertions.assertEquals( + "00000000001000000000000000011100000000000001010000000000001000", builder.toString()); } @Test public void testEncode7() { BitString builder = new BitString(); FixedIntegerRangeEncoder.encode(builder, Arrays.asList(12, 24, 48)); - Assertions.assertEquals("000000000011000000000000011000000000000001100000000000000110000", - builder.toString()); + Assertions.assertEquals( + "000000000011000000000000011000000000000001100000000000000110000", builder.toString()); } @Test public void testEncode8() { BitString builder = new BitString(); FixedIntegerRangeEncoder.encode(builder, Arrays.asList(12, 24, 48, 49)); - Assertions.assertEquals("0000000000110000000000000110000000000000011000100000000001100000000000000110001", + Assertions.assertEquals( + "0000000000110000000000000110000000000000011000100000000001100000000000000110001", builder.toString()); } @@ -101,37 +100,44 @@ public void testDecode2() throws DecodingException { @Test public void testDecode3() throws DecodingException { - Assertions.assertEquals(Set.of(2, 3, 4, 5, 6), - decode("000000000001100000000000000100000000000000110")); + Assertions.assertEquals( + Set.of(2, 3, 4, 5, 6), decode("000000000001100000000000000100000000000000110")); } @Test public void testDecode4() throws DecodingException { - Assertions.assertEquals(Set.of(2, 5, 6, 7), + Assertions.assertEquals( + Set.of(2, 5, 6, 7), decode("00000000001000000000000000010100000000000001010000000000000111")); } @Test public void testDecode5() throws DecodingException { - Assertions.assertEquals(Set.of(3, 5, 6, 7, 8), + Assertions.assertEquals( + Set.of(3, 5, 6, 7, 8), decode("00000000001000000000000000011100000000000001010000000000001000")); } @Test public void testDecode6() throws DecodingException { - Assertions.assertEquals(Set.of(12, 24, 48), + Assertions.assertEquals( + Set.of(12, 24, 48), decode("000000000011000000000000011000000000000001100000000000000110000")); } @Test public void testDecode7() throws DecodingException { - Assertions.assertEquals(Set.of(12, 24, 48, 49), decode("0000000000110000000000000110000000000000011000100000000001100000000000000110001")); + Assertions.assertEquals( + Set.of(12, 24, 48, 49), + decode("0000000000110000000000000110000000000000011000100000000001100000000000000110001")); } @Test public void testDecode8() throws DecodingException { - Assertions.assertEquals(Set.of(2, 6, 8, 12, 18, 23, 24, 25, 37, 42), decode( - "00000000100000000000000000010000000000000001100000000000000100000000000000001100000000000000100101000000000001011100000000000110010000000000010010100000000000101010")); + Assertions.assertEquals( + Set.of(2, 6, 8, 12, 18, 23, 24, 25, 37, 42), + decode( + "00000000100000000000000000010000000000000001100000000000000100000000000000001100000000000000100101000000000001011100000000000110010000000000010010100000000000101010")); } @Test diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoderTest.java index 50fea8bb..fec0583e 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoderTest.java @@ -1,11 +1,10 @@ package com.iab.gpp.encoder.datatype.encoder; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; public class FixedLongEncoderTest { @@ -44,14 +43,13 @@ public void testEncode5() { Assertions.assertEquals("00000111", builder.toString()); } - @Test public void testEncode6() { BitString builder = new BitString(); builder.writeLong(16630898421L, 36); Assertions.assertEquals("001111011111010001110101111011110101", builder.toString()); } - + @Test public void testEncode7() { try { diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoderTest.java index 9a5c9340..78c1e0b6 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoderTest.java @@ -1,11 +1,10 @@ package com.iab.gpp.encoder.datatype.encoder; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; public class FixedStringEncoderTest { @@ -37,7 +36,7 @@ public void testEncode3() { private String decode(String str) { return FixedStringEncoder.decode(BitString.of(str), str.length() / 6); } - + @Test public void testDecode1() { Assertions.assertEquals("AB", decode("000000000001")); diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/IntegerSetTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/IntegerSetTest.java index acd64a61..d2f32236 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/IntegerSetTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/IntegerSetTest.java @@ -1,12 +1,13 @@ package com.iab.gpp.encoder.datatype.encoder; import static org.junit.jupiter.api.Assertions.*; + +import com.iab.gpp.encoder.datatype.IntegerSet; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Set; import org.junit.jupiter.api.Test; -import com.iab.gpp.encoder.datatype.IntegerSet; class IntegerSetTest { @@ -18,34 +19,33 @@ void test() { set.add(0); set.add(2); set.add(3); - assertEquals(Set.of(0,2,3), set); + assertEquals(Set.of(0, 2, 3), set); assertTrue(set.isDirty()); assertFalse(set.isEmpty()); assertEquals(3, set.size()); assertFalse(set.remove(1)); assertTrue(set.remove(2)); assertEquals(2, set.size()); - set.addAll(List.of(3,4)); - assertEquals(Set.of(0,3,4), set); + set.addAll(List.of(3, 4)); + assertEquals(Set.of(0, 3, 4), set); List out = new ArrayList<>(); Iterator it = set.iterator(); it.forEachRemaining(out::add); - assertEquals(List.of(0,3,4), out); + assertEquals(List.of(0, 3, 4), out); assertFalse(set.contains(2)); assertTrue(set.contains(3)); assertTrue(set.isDirty()); set.setDirty(false); assertFalse(set.isDirty()); - set.retainAll(Set.of(1,2,3)); + set.retainAll(Set.of(1, 2, 3)); assertEquals(Set.of(3), set); - assertTrue(set.addAll(List.of(1,3,4))); - assertFalse(set.addAll(List.of(1,3,4))); - assertTrue(set.removeAll(List.of(3,4))); + assertTrue(set.addAll(List.of(1, 3, 4))); + assertFalse(set.addAll(List.of(1, 3, 4))); + assertTrue(set.removeAll(List.of(3, 4))); assertEquals(Set.of(1), set); set.clear(); assertTrue(set.isEmpty()); set.addRange(1, 3); - assertEquals(Set.of(1,2), set); + assertEquals(Set.of(1, 2), set); } - } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/HeaderV1Test.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/HeaderV1Test.java index 94bb60c7..60a9479f 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/HeaderV1Test.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/HeaderV1Test.java @@ -1,12 +1,12 @@ package com.iab.gpp.encoder.section; +import com.iab.gpp.encoder.error.DecodingException; +import com.iab.gpp.encoder.field.HeaderV1Field; import java.util.ArrayList; import java.util.Arrays; import java.util.Set; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.HeaderV1Field; public class HeaderV1Test { @@ -37,7 +37,8 @@ public void testDecode1() { headerV1.decode("DBAA"); Assertions.assertEquals(Set.of(), headerV1.getFieldValue(HeaderV1Field.SECTION_IDS)); Assertions.assertEquals(headerV1.getFieldValue(HeaderV1Field.VERSION), headerV1.getVersion()); - Assertions.assertEquals(headerV1.getFieldValue(HeaderV1Field.SECTION_IDS), headerV1.getSectionsIds()); + Assertions.assertEquals( + headerV1.getFieldValue(HeaderV1Field.SECTION_IDS), headerV1.getSectionsIds()); } @Test @@ -46,7 +47,8 @@ public void testDecode2() { headerV1.decode("DBABMA"); Assertions.assertEquals(Set.of(2), headerV1.getFieldValue(HeaderV1Field.SECTION_IDS)); Assertions.assertEquals(headerV1.getFieldValue(HeaderV1Field.VERSION), headerV1.getVersion()); - Assertions.assertEquals(headerV1.getFieldValue(HeaderV1Field.SECTION_IDS), headerV1.getSectionsIds()); + Assertions.assertEquals( + headerV1.getFieldValue(HeaderV1Field.SECTION_IDS), headerV1.getSectionsIds()); } @Test @@ -55,13 +57,16 @@ public void testDecode3() { headerV1.decode("DBACNYA"); Assertions.assertEquals(Set.of(2, 6), headerV1.getFieldValue(HeaderV1Field.SECTION_IDS)); Assertions.assertEquals(headerV1.getFieldValue(HeaderV1Field.VERSION), headerV1.getVersion()); - Assertions.assertEquals(headerV1.getFieldValue(HeaderV1Field.SECTION_IDS), headerV1.getSectionsIds()); + Assertions.assertEquals( + headerV1.getFieldValue(HeaderV1Field.SECTION_IDS), headerV1.getSectionsIds()); } - + @Test() public void testDecodeGarbage() { - Assertions.assertThrows(DecodingException.class, () -> { - new HeaderV1("z").getSectionsIds(); - }); + Assertions.assertThrows( + DecodingException.class, + () -> { + new HeaderV1("z").getSectionsIds(); + }); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfCaV1Test.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfCaV1Test.java index 8b6ecf76..60392396 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfCaV1Test.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfCaV1Test.java @@ -1,6 +1,10 @@ package com.iab.gpp.encoder.section; - +import com.iab.gpp.encoder.datatype.RangeEntry; +import com.iab.gpp.encoder.error.DecodingException; +import com.iab.gpp.encoder.error.EncodingException; +import com.iab.gpp.encoder.error.InvalidFieldException; +import com.iab.gpp.encoder.field.TcfCaV1Field; import java.time.ZoneId; import java.time.ZonedDateTime; import java.util.ArrayList; @@ -9,11 +13,6 @@ import java.util.Set; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import com.iab.gpp.encoder.datatype.RangeEntry; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.error.EncodingException; -import com.iab.gpp.encoder.error.InvalidFieldException; -import com.iab.gpp.encoder.field.TcfCaV1Field; public class TcfCaV1Test { @@ -21,9 +20,14 @@ public class TcfCaV1Test { public void testEncode1() { TcfCaV1 tcfCaV1 = new TcfCaV1(); - tcfCaV1.setFieldValue(TcfCaV1Field.CREATED, ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); - tcfCaV1.setFieldValue(TcfCaV1Field.LAST_UPDATED, ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); - Assertions.assertEquals("BPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAA.YAAAAAAAAAA", tcfCaV1.encode()); + tcfCaV1.setFieldValue( + TcfCaV1Field.CREATED, + ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); + tcfCaV1.setFieldValue( + TcfCaV1Field.LAST_UPDATED, + ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); + Assertions.assertEquals( + "BPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAA.YAAAAAAAAAA", tcfCaV1.encode()); } @Test @@ -34,38 +38,53 @@ public void testEncode2() { tcfCaV1.setFieldValue(TcfCaV1Field.CMP_VERSION, 2); tcfCaV1.setFieldValue(TcfCaV1Field.VENDOR_LIST_VERSION, 413); tcfCaV1.setFieldValue(TcfCaV1Field.USE_NON_STANDARD_STACKS, true); - tcfCaV1.setFieldValue(TcfCaV1Field.SPECIAL_FEATURE_EXPRESS_CONSENT, - Arrays.asList(6, 7, 8, 9, 10, 11)); - tcfCaV1.setFieldValue(TcfCaV1Field.PURPOSES_EXPRESS_CONSENT, + tcfCaV1.setFieldValue( + TcfCaV1Field.SPECIAL_FEATURE_EXPRESS_CONSENT, Arrays.asList(6, 7, 8, 9, 10, 11)); + tcfCaV1.setFieldValue( + TcfCaV1Field.PURPOSES_EXPRESS_CONSENT, Arrays.asList(0, 1, 2, 3, 4, 5, 12, 13, 14, 15, 16, 17)); - tcfCaV1.setFieldValue(TcfCaV1Field.PURPOSES_IMPLIED_CONSENT, + tcfCaV1.setFieldValue( + TcfCaV1Field.PURPOSES_IMPLIED_CONSENT, Arrays.asList(6, 7, 8, 9, 10, 11, 18, 19, 20, 21, 22, 23)); tcfCaV1.setFieldValue(TcfCaV1Field.VENDOR_EXPRESS_CONSENT, Arrays.asList(12, 24, 48)); tcfCaV1.setFieldValue(TcfCaV1Field.VENDOR_IMPLIED_CONSENT, Arrays.asList(18, 30)); - tcfCaV1.setFieldValue(TcfCaV1Field.PUB_PURPOSES_EXPRESS_CONSENT, + tcfCaV1.setFieldValue( + TcfCaV1Field.PUB_PURPOSES_EXPRESS_CONSENT, Arrays.asList(0, 1, 2, 6, 7, 8, 12, 13, 14, 18, 19, 20)); - tcfCaV1.setFieldValue(TcfCaV1Field.PUB_PURPOSES_IMPLIED_CONSENT, + tcfCaV1.setFieldValue( + TcfCaV1Field.PUB_PURPOSES_IMPLIED_CONSENT, Arrays.asList(3, 4, 5, 9, 10, 11, 15, 16, 17, 21, 22, 23)); tcfCaV1.setFieldValue(TcfCaV1Field.NUM_CUSTOM_PURPOSES, 3); tcfCaV1.setFieldValue(TcfCaV1Field.CUSTOM_PURPOSES_EXPRESS_CONSENT, Set.of(1)); - tcfCaV1.setFieldValue(TcfCaV1Field.CUSTOM_PURPOSES_IMPLIED_CONSENT, Set.of(0,2)); + tcfCaV1.setFieldValue(TcfCaV1Field.CUSTOM_PURPOSES_IMPLIED_CONSENT, Set.of(0, 2)); - tcfCaV1.setFieldValue(TcfCaV1Field.CREATED, ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); - tcfCaV1.setFieldValue(TcfCaV1Field.LAST_UPDATED, ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); + tcfCaV1.setFieldValue( + TcfCaV1Field.CREATED, + ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); + tcfCaV1.setFieldValue( + TcfCaV1Field.LAST_UPDATED, + ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); - Assertions.assertEquals("BPSG_8APSG_8AAyACAENGdCgf_gfgAfgfgBgABABAAABAB4AACACAAA.fHHHA4444ao", tcfCaV1.encode()); + Assertions.assertEquals( + "BPSG_8APSG_8AAyACAENGdCgf_gfgAfgfgBgABABAAABAB4AACACAAA.fHHHA4444ao", tcfCaV1.encode()); } @Test public void testEncode3() throws EncodingException, InvalidFieldException { TcfCaV1 tcfCaV1 = new TcfCaV1(); - tcfCaV1.setFieldValue(TcfCaV1Field.DISCLOSED_VENDORS, Arrays.asList(1, 2, 3, 5, 6, 7, 10, 11, 12)); + tcfCaV1.setFieldValue( + TcfCaV1Field.DISCLOSED_VENDORS, Arrays.asList(1, 2, 3, 5, 6, 7, 10, 11, 12)); - tcfCaV1.setFieldValue(TcfCaV1Field.CREATED, ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); - tcfCaV1.setFieldValue(TcfCaV1Field.LAST_UPDATED, ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); + tcfCaV1.setFieldValue( + TcfCaV1Field.CREATED, + ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); + tcfCaV1.setFieldValue( + TcfCaV1Field.LAST_UPDATED, + ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); - Assertions.assertEquals("BPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAA.YAAAAAAAAAA.IAGO5w", tcfCaV1.encode()); + Assertions.assertEquals( + "BPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAA.YAAAAAAAAAA.IAGO5w", tcfCaV1.encode()); } @Test @@ -77,9 +96,15 @@ public void testEncode4() throws EncodingException, InvalidFieldException { TcfCaV1 tcfCaV1 = new TcfCaV1(); tcfCaV1.setFieldValue(TcfCaV1Field.PUB_RESTRICTIONS, pubRestrictions); - tcfCaV1.setFieldValue(TcfCaV1Field.CREATED, ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); - tcfCaV1.setFieldValue(TcfCaV1Field.LAST_UPDATED, ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); - Assertions.assertEquals("BPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAACCgBwABAAOAAoADgAJA.YAAAAAAAAAA", tcfCaV1.encode()); + tcfCaV1.setFieldValue( + TcfCaV1Field.CREATED, + ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); + tcfCaV1.setFieldValue( + TcfCaV1Field.LAST_UPDATED, + ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); + Assertions.assertEquals( + "BPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAACCgBwABAAOAAoADgAJA.YAAAAAAAAAA", + tcfCaV1.encode()); } @Test @@ -90,30 +115,22 @@ public void testDecode1() { Assertions.assertEquals(0, tcfCaV1.getCmpVersion()); Assertions.assertEquals(0, tcfCaV1.getVendorListVersion()); Assertions.assertEquals(false, tcfCaV1.getUseNonStandardStacks()); - Assertions.assertEquals( - Set.of(), - tcfCaV1.getSpecialFeatureExpressConsent()); - Assertions - .assertEquals( - Set.of(), - tcfCaV1.getPurposesExpressConsent()); - Assertions - .assertEquals( - Set.of(), - tcfCaV1.getPurposesImpliedConsent()); + Assertions.assertEquals(Set.of(), tcfCaV1.getSpecialFeatureExpressConsent()); + Assertions.assertEquals(Set.of(), tcfCaV1.getPurposesExpressConsent()); + Assertions.assertEquals(Set.of(), tcfCaV1.getPurposesImpliedConsent()); Assertions.assertEquals(Set.of(), tcfCaV1.getVendorExpressConsent()); Assertions.assertEquals(Set.of(), tcfCaV1.getVendorImpliedConsent()); - Assertions.assertEquals( - Set.of(), - tcfCaV1.getPubPurposesExpressConsent()); - Assertions.assertEquals( - Set.of(), - tcfCaV1.getPubPurposesImpliedConsent()); + Assertions.assertEquals(Set.of(), tcfCaV1.getPubPurposesExpressConsent()); + Assertions.assertEquals(Set.of(), tcfCaV1.getPubPurposesImpliedConsent()); Assertions.assertEquals(0, tcfCaV1.getNumCustomPurposes()); Assertions.assertEquals(Set.of(), tcfCaV1.getCustomPurposesExpressConsent()); Assertions.assertEquals(Set.of(), tcfCaV1.getCustomPurposesImpliedConsent()); - Assertions.assertEquals(ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant(), tcfCaV1.getCreated()); - Assertions.assertEquals(ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant(), tcfCaV1.getLastUpdated()); + Assertions.assertEquals( + ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant(), + tcfCaV1.getCreated()); + Assertions.assertEquals( + ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant(), + tcfCaV1.getLastUpdated()); Assertions.assertEquals("EN", tcfCaV1.getConsentLanguage()); Assertions.assertEquals(5, tcfCaV1.getId()); @@ -122,33 +139,34 @@ public void testDecode1() { @Test public void testDecode2() { - TcfCaV1 tcfCaV1 = new TcfCaV1("BPSG_8APSG_8AAyACAENGdCgf_gfgAfgfgBgABABAAABAB4AACACAAA.fHHHA4444ao"); + TcfCaV1 tcfCaV1 = + new TcfCaV1("BPSG_8APSG_8AAyACAENGdCgf_gfgAfgfgBgABABAAABAB4AACACAAA.fHHHA4444ao"); Assertions.assertEquals(50, tcfCaV1.getCmpId()); Assertions.assertEquals(2, tcfCaV1.getCmpVersion()); Assertions.assertEquals(413, tcfCaV1.getVendorListVersion()); Assertions.assertEquals(true, tcfCaV1.getUseNonStandardStacks()); - Assertions.assertEquals(Set.of(7, 8, 9, 10, 11, 12), - tcfCaV1.getSpecialFeatureExpressConsent()); - Assertions.assertEquals(Set.of(1, 2, 3, 4, 5, 6, 13, 14, 15, 16, 17, 18), - tcfCaV1.getPurposesExpressConsent()); - Assertions.assertEquals(Set.of(7, 8, 9, 10, 11, 12, 19, 20, 21, 22, 23, 24), - tcfCaV1.getPurposesImpliedConsent()); + Assertions.assertEquals(Set.of(7, 8, 9, 10, 11, 12), tcfCaV1.getSpecialFeatureExpressConsent()); + Assertions.assertEquals( + Set.of(1, 2, 3, 4, 5, 6, 13, 14, 15, 16, 17, 18), tcfCaV1.getPurposesExpressConsent()); + Assertions.assertEquals( + Set.of(7, 8, 9, 10, 11, 12, 19, 20, 21, 22, 23, 24), tcfCaV1.getPurposesImpliedConsent()); Assertions.assertEquals(Set.of(12, 24, 48), tcfCaV1.getVendorExpressConsent()); Assertions.assertEquals(Set.of(18, 30), tcfCaV1.getVendorImpliedConsent()); - Assertions - .assertEquals( - Set.of(1, 2, 3, 7, 8, 9, 13, 14, 15, 19, 20, 21), - tcfCaV1.getPubPurposesExpressConsent()); - Assertions - .assertEquals( - Set.of(4, 5, 6, 10, 11, 12, 16, 17, 18, 22, 23, 24), - tcfCaV1.getPubPurposesImpliedConsent()); + Assertions.assertEquals( + Set.of(1, 2, 3, 7, 8, 9, 13, 14, 15, 19, 20, 21), tcfCaV1.getPubPurposesExpressConsent()); + Assertions.assertEquals( + Set.of(4, 5, 6, 10, 11, 12, 16, 17, 18, 22, 23, 24), + tcfCaV1.getPubPurposesImpliedConsent()); Assertions.assertEquals(3, tcfCaV1.getNumCustomPurposes()); Assertions.assertEquals(Set.of(2), tcfCaV1.getCustomPurposesExpressConsent()); Assertions.assertEquals(Set.of(1, 3), tcfCaV1.getCustomPurposesImpliedConsent()); - Assertions.assertEquals(ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant(), tcfCaV1.getCreated()); - Assertions.assertEquals(ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant(), tcfCaV1.getLastUpdated()); + Assertions.assertEquals( + ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant(), + tcfCaV1.getCreated()); + Assertions.assertEquals( + ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant(), + tcfCaV1.getLastUpdated()); Assertions.assertEquals("EN", tcfCaV1.getConsentLanguage()); Assertions.assertEquals(5, tcfCaV1.getId()); @@ -165,7 +183,8 @@ public void testDecode3() throws DecodingException { @Test public void testDecode4() throws DecodingException { - TcfCaV1 tcfCaV1 = new TcfCaV1("BPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAACCgBwABAAOAAoADgAJA.YAAAAAAAAAA"); + TcfCaV1 tcfCaV1 = + new TcfCaV1("BPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAACCgBwABAAOAAoADgAJA.YAAAAAAAAAA"); List pubRestictions = tcfCaV1.getPubRestrictions(); Assertions.assertEquals(1, pubRestictions.size()); @@ -173,18 +192,22 @@ public void testDecode4() throws DecodingException { Assertions.assertEquals(1, pubRestictions.get(0).getType()); Assertions.assertEquals(Set.of(1, 2, 3, 5, 6, 7, 9), pubRestictions.get(0).getIds()); } - + @Test() public void testDecodeGarbage1() { - Assertions.assertThrows(DecodingException.class, () -> { - new TcfCaV1("A").getPubRestrictions(); - }); + Assertions.assertThrows( + DecodingException.class, + () -> { + new TcfCaV1("A").getPubRestrictions(); + }); } - + @Test() public void testDecodeGarbage2() { - Assertions.assertThrows(DecodingException.class, () -> { - new TcfCaV1("z").getPubRestrictions(); - }); + Assertions.assertThrows( + DecodingException.class, + () -> { + new TcfCaV1("z").getPubRestrictions(); + }); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java index 09f2d2a8..1abdfb65 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java @@ -1,5 +1,9 @@ package com.iab.gpp.encoder.section; +import com.iab.gpp.encoder.datatype.IntegerSet; +import com.iab.gpp.encoder.datatype.RangeEntry; +import com.iab.gpp.encoder.error.DecodingException; +import com.iab.gpp.encoder.field.TcfEuV2Field; import java.time.ZoneId; import java.time.ZonedDateTime; import java.util.ArrayList; @@ -8,19 +12,20 @@ import java.util.Set; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import com.iab.gpp.encoder.datatype.IntegerSet; -import com.iab.gpp.encoder.datatype.RangeEntry; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.TcfEuV2Field; public class TcfEuV2Test { @Test public void testEncode1() { TcfEuV2 tcfEuV2 = new TcfEuV2(); - tcfEuV2.setFieldValue(TcfEuV2Field.CREATED, ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); - tcfEuV2.setFieldValue(TcfEuV2Field.LAST_UPDATED, ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); - Assertions.assertEquals("CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAAAA.QAAA.IAAA", tcfEuV2.encode()); + tcfEuV2.setFieldValue( + TcfEuV2Field.CREATED, + ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); + tcfEuV2.setFieldValue( + TcfEuV2Field.LAST_UPDATED, + ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); + Assertions.assertEquals( + "CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAAAA.QAAA.IAAA", tcfEuV2.encode()); TcfEuV2Field.TCFEUV2_CORE_SEGMENT_FIELD_NAMES.toString(); } @@ -28,21 +33,25 @@ public void testEncode1() { public void testEncode2() { TcfEuV2 tcfEuV2 = new TcfEuV2(); tcfEuV2.setFieldValue(TcfEuV2Field.IS_SERVICE_SPECIFIC, true); - tcfEuV2.setFieldValue(TcfEuV2Field.CREATED, ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); - tcfEuV2.setFieldValue(TcfEuV2Field.LAST_UPDATED, ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); + tcfEuV2.setFieldValue( + TcfEuV2Field.CREATED, + ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); + tcfEuV2.setFieldValue( + TcfEuV2Field.LAST_UPDATED, + ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); Assertions.assertEquals(3, tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_PURPOSES_SEGMENT_TYPE)); + Assertions.assertEquals(Set.of(), tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_CONSENTS)); Assertions.assertEquals( - Set.of(), - tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_CONSENTS)); - Assertions.assertEquals( - Set.of(), - tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_LEGITIMATE_INTERESTS)); + Set.of(), tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_LEGITIMATE_INTERESTS)); Assertions.assertEquals(0, tcfEuV2.getFieldValue(TcfEuV2Field.NUM_CUSTOM_PURPOSES)); - Assertions.assertEquals(Set.of(), tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_CUSTOM_CONSENTS)); - Assertions.assertEquals(Set.of(), tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_CUSTOM_LEGITIMATE_INTERESTS)); + Assertions.assertEquals( + Set.of(), tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_CUSTOM_CONSENTS)); + Assertions.assertEquals( + Set.of(), tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_CUSTOM_LEGITIMATE_INTERESTS)); - Assertions.assertEquals("CPSG_8APSG_8AAAAAAENAACgAAAAAAAAAAAAAAAAAAAA.YAAAAAAAAAAA", tcfEuV2.encode()); + Assertions.assertEquals( + "CPSG_8APSG_8AAAAAAENAACgAAAAAAAAAAAAAAAAAAAA.YAAAAAAAAAAA", tcfEuV2.encode()); } @Test @@ -50,8 +59,12 @@ public void testDecode1() { TcfEuV2 tcfEuV2 = new TcfEuV2("CAAAAAAAAAAAAAAAAAENAACAAAAAAAAAAAAAAAAAAAAA.QAAA.IAAA"); Assertions.assertEquals(2, tcfEuV2.getVersion()); - Assertions.assertEquals(ZonedDateTime.of(1970, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant(), tcfEuV2.getCreated()); - Assertions.assertEquals(ZonedDateTime.of(1970, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant(), tcfEuV2.getLastUpdated()); + Assertions.assertEquals( + ZonedDateTime.of(1970, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant(), + tcfEuV2.getCreated()); + Assertions.assertEquals( + ZonedDateTime.of(1970, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant(), + tcfEuV2.getLastUpdated()); Assertions.assertEquals(0, tcfEuV2.getCmpId()); Assertions.assertEquals(0, tcfEuV2.getCmpVersion()); Assertions.assertEquals(0, tcfEuV2.getConsentScreen()); @@ -60,29 +73,17 @@ public void testDecode1() { Assertions.assertEquals(2, tcfEuV2.getPolicyVersion()); Assertions.assertEquals(false, tcfEuV2.getIsServiceSpecific()); Assertions.assertEquals(false, tcfEuV2.getUseNonStandardStacks()); - Assertions.assertEquals( - Set.of(), - tcfEuV2.getSpecialFeatureOptins()); - Assertions - .assertEquals( - Set.of(), - tcfEuV2.getPurposeConsents()); - Assertions.assertEquals( - Set.of(), - tcfEuV2.getPurposeLegitimateInterests()); + Assertions.assertEquals(Set.of(), tcfEuV2.getSpecialFeatureOptins()); + Assertions.assertEquals(Set.of(), tcfEuV2.getPurposeConsents()); + Assertions.assertEquals(Set.of(), tcfEuV2.getPurposeLegitimateInterests()); Assertions.assertEquals(false, tcfEuV2.getPurposeOneTreatment()); Assertions.assertEquals("AA", tcfEuV2.getPublisherCountryCode()); Assertions.assertEquals(Set.of(), tcfEuV2.getVendorConsents()); Assertions.assertEquals(Set.of(), tcfEuV2.getVendorLegitimateInterests()); Assertions.assertEquals(Arrays.asList(), tcfEuV2.getPublisherRestrictions()); Assertions.assertEquals(3, tcfEuV2.getPublisherPurposesSegmentType()); - Assertions - .assertEquals( - Set.of(), - tcfEuV2.getPublisherConsents()); - Assertions.assertEquals( - Set.of(), - tcfEuV2.getPublisherLegitimateInterests()); + Assertions.assertEquals(Set.of(), tcfEuV2.getPublisherConsents()); + Assertions.assertEquals(Set.of(), tcfEuV2.getPublisherLegitimateInterests()); Assertions.assertEquals(0, tcfEuV2.getNumCustomPurposes()); Assertions.assertEquals(Set.of(), tcfEuV2.getPublisherCustomConsents()); Assertions.assertEquals(Set.of(), tcfEuV2.getPublisherCustomLegitimateInterests()); @@ -99,8 +100,12 @@ public void testDecode2() { TcfEuV2 tcfEuV2 = new TcfEuV2("CPSG_8APSG_8AAAAAAENAACgAAAAAAAAAAAAAAAAAAAA.YAAAAAAAAAAA"); Assertions.assertEquals(2, tcfEuV2.getVersion()); - Assertions.assertEquals(ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant(), tcfEuV2.getCreated()); - Assertions.assertEquals(ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant(), tcfEuV2.getLastUpdated()); + Assertions.assertEquals( + ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant(), + tcfEuV2.getCreated()); + Assertions.assertEquals( + ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant(), + tcfEuV2.getLastUpdated()); Assertions.assertEquals(0, tcfEuV2.getCmpId()); Assertions.assertEquals(0, tcfEuV2.getCmpVersion()); Assertions.assertEquals(0, tcfEuV2.getConsentScreen()); @@ -109,29 +114,17 @@ public void testDecode2() { Assertions.assertEquals(2, tcfEuV2.getPolicyVersion()); Assertions.assertEquals(true, tcfEuV2.getIsServiceSpecific()); Assertions.assertEquals(false, tcfEuV2.getUseNonStandardStacks()); - Assertions.assertEquals( - Set.of(), - tcfEuV2.getSpecialFeatureOptins()); - Assertions - .assertEquals( - Set.of(), - tcfEuV2.getPurposeConsents()); - Assertions.assertEquals( - Set.of(), - tcfEuV2.getPurposeLegitimateInterests()); + Assertions.assertEquals(Set.of(), tcfEuV2.getSpecialFeatureOptins()); + Assertions.assertEquals(Set.of(), tcfEuV2.getPurposeConsents()); + Assertions.assertEquals(Set.of(), tcfEuV2.getPurposeLegitimateInterests()); Assertions.assertEquals(false, tcfEuV2.getPurposeOneTreatment()); Assertions.assertEquals("AA", tcfEuV2.getPublisherCountryCode()); Assertions.assertEquals(Set.of(), tcfEuV2.getVendorConsents()); Assertions.assertEquals(Set.of(), tcfEuV2.getVendorLegitimateInterests()); Assertions.assertEquals(Arrays.asList(), tcfEuV2.getPublisherRestrictions()); Assertions.assertEquals(3, tcfEuV2.getPublisherPurposesSegmentType()); - Assertions - .assertEquals( - Set.of(), - tcfEuV2.getPublisherConsents()); - Assertions.assertEquals( - Set.of(), - tcfEuV2.getPublisherLegitimateInterests()); + Assertions.assertEquals(Set.of(), tcfEuV2.getPublisherConsents()); + Assertions.assertEquals(Set.of(), tcfEuV2.getPublisherLegitimateInterests()); Assertions.assertEquals(0, tcfEuV2.getNumCustomPurposes()); Assertions.assertEquals(Set.of(), tcfEuV2.getPublisherCustomConsents()); Assertions.assertEquals(Set.of(), tcfEuV2.getPublisherCustomLegitimateInterests()); @@ -145,9 +138,9 @@ public void testDecode2() { @Test public void testDecode3() { - TcfEuV2 tcfEuV2 = new TcfEuV2( - "CPcqBNJPcqBNJNwAAAENAwCAAAAAAAAAAAAAAAAAAAAA.YAAAAAAAAAA.QGLtV_T9fb2vj-_Z99_tkeYwf95y3p-wzhheMs-8NyZeH_B4Wv2MyvBX4JiQKGRgksjLBAQdtHGlcTQgBwIlViTLMYk2MjzNKJrJEilsbO2dYGD9Pn8HT3ZCY70-vv__7v3ff_3g.IGLtV_T9fb2vj-_Z99_tkeYwf95y3p-wzhheMs-8NyZeH_B4Wv2MyvBX4JiQKGRgksjLBAQdtHGlcTQgBwIlViTLMYk2MjzNKJrJEilsbO2dYGD9Pn8HT3ZCY70-vv__7v3ff_3g"); - + TcfEuV2 tcfEuV2 = + new TcfEuV2( + "CPcqBNJPcqBNJNwAAAENAwCAAAAAAAAAAAAAAAAAAAAA.YAAAAAAAAAA.QGLtV_T9fb2vj-_Z99_tkeYwf95y3p-wzhheMs-8NyZeH_B4Wv2MyvBX4JiQKGRgksjLBAQdtHGlcTQgBwIlViTLMYk2MjzNKJrJEilsbO2dYGD9Pn8HT3ZCY70-vv__7v3ff_3g.IGLtV_T9fb2vj-_Z99_tkeYwf95y3p-wzhheMs-8NyZeH_B4Wv2MyvBX4JiQKGRgksjLBAQdtHGlcTQgBwIlViTLMYk2MjzNKJrJEilsbO2dYGD9Pn8HT3ZCY70-vv__7v3ff_3g"); Assertions.assertEquals(2, tcfEuV2.getFieldValue(TcfEuV2Field.VERSION)); Assertions.assertEquals(880, tcfEuV2.getFieldValue(TcfEuV2Field.CMP_ID)); @@ -164,7 +157,8 @@ public void testDecode3() { Assertions.assertEquals(3, tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_PURPOSES_SEGMENT_TYPE)); Assertions.assertEquals(2, tcfEuV2.getFieldValue(TcfEuV2Field.VENDORS_ALLOWED_SEGMENT_TYPE)); - List vendorsAllowed = new ArrayList<>((IntegerSet) tcfEuV2.getFieldValue(TcfEuV2Field.VENDORS_ALLOWED)); + List vendorsAllowed = + new ArrayList<>((IntegerSet) tcfEuV2.getFieldValue(TcfEuV2Field.VENDORS_ALLOWED)); Assertions.assertEquals(434, vendorsAllowed.size()); Assertions.assertEquals(1, vendorsAllowed.get(0)); Assertions.assertEquals(2, vendorsAllowed.get(1)); @@ -187,7 +181,8 @@ public void testDecode3() { Assertions.assertEquals(791, vendorsAllowed.get(vendorsAllowed.size() - 1)); Assertions.assertEquals(1, tcfEuV2.getFieldValue(TcfEuV2Field.VENDORS_DISCLOSED_SEGMENT_TYPE)); - List vendorsDisclosed = new ArrayList<>((IntegerSet) tcfEuV2.getFieldValue(TcfEuV2Field.VENDORS_DISCLOSED)); + List vendorsDisclosed = + new ArrayList<>((IntegerSet) tcfEuV2.getFieldValue(TcfEuV2Field.VENDORS_DISCLOSED)); Assertions.assertEquals(434, vendorsDisclosed.size()); Assertions.assertEquals(1, vendorsDisclosed.get(0)); Assertions.assertEquals(2, vendorsDisclosed.get(1)); @@ -211,44 +206,79 @@ public void testDecode3() { Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.VERSION), tcfEuV2.getVersion()); Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.CREATED), tcfEuV2.getCreated()); - Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.LAST_UPDATED), tcfEuV2.getLastUpdated()); + Assertions.assertEquals( + tcfEuV2.getFieldValue(TcfEuV2Field.LAST_UPDATED), tcfEuV2.getLastUpdated()); Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.CMP_ID), tcfEuV2.getCmpId()); - Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.CMP_VERSION), tcfEuV2.getCmpVersion()); - Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.CONSENT_SCREEN), tcfEuV2.getConsentScreen()); - Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.CONSENT_LANGUAGE), tcfEuV2.getConsentLanguage()); - Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_LIST_VERSION), tcfEuV2.getVendorListVersion()); - Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.POLICY_VERSION), tcfEuV2.getPolicyVersion()); - Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.IS_SERVICE_SPECIFIC), tcfEuV2.getIsServiceSpecific()); - Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.USE_NON_STANDARD_STACKS), tcfEuV2.getUseNonStandardStacks()); - Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.SPECIAL_FEATURE_OPTINS), tcfEuV2.getSpecialFeatureOptins()); - Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_CONSENTS), tcfEuV2.getPurposeConsents()); - Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_LEGITIMATE_INTERESTS), + Assertions.assertEquals( + tcfEuV2.getFieldValue(TcfEuV2Field.CMP_VERSION), tcfEuV2.getCmpVersion()); + Assertions.assertEquals( + tcfEuV2.getFieldValue(TcfEuV2Field.CONSENT_SCREEN), tcfEuV2.getConsentScreen()); + Assertions.assertEquals( + tcfEuV2.getFieldValue(TcfEuV2Field.CONSENT_LANGUAGE), tcfEuV2.getConsentLanguage()); + Assertions.assertEquals( + tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_LIST_VERSION), tcfEuV2.getVendorListVersion()); + Assertions.assertEquals( + tcfEuV2.getFieldValue(TcfEuV2Field.POLICY_VERSION), tcfEuV2.getPolicyVersion()); + Assertions.assertEquals( + tcfEuV2.getFieldValue(TcfEuV2Field.IS_SERVICE_SPECIFIC), tcfEuV2.getIsServiceSpecific()); + Assertions.assertEquals( + tcfEuV2.getFieldValue(TcfEuV2Field.USE_NON_STANDARD_STACKS), + tcfEuV2.getUseNonStandardStacks()); + Assertions.assertEquals( + tcfEuV2.getFieldValue(TcfEuV2Field.SPECIAL_FEATURE_OPTINS), + tcfEuV2.getSpecialFeatureOptins()); + Assertions.assertEquals( + tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_CONSENTS), tcfEuV2.getPurposeConsents()); + Assertions.assertEquals( + tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_LEGITIMATE_INTERESTS), tcfEuV2.getPurposeLegitimateInterests()); - Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_ONE_TREATMENT), tcfEuV2.getPurposeOneTreatment()); - Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_COUNTRY_CODE), tcfEuV2.getPublisherCountryCode()); - Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_CONSENTS), tcfEuV2.getVendorConsents()); - Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_LEGITIMATE_INTERESTS), tcfEuV2.getVendorLegitimateInterests()); - Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_RESTRICTIONS), tcfEuV2.getPublisherRestrictions()); - Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_PURPOSES_SEGMENT_TYPE), + Assertions.assertEquals( + tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_ONE_TREATMENT), + tcfEuV2.getPurposeOneTreatment()); + Assertions.assertEquals( + tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_COUNTRY_CODE), + tcfEuV2.getPublisherCountryCode()); + Assertions.assertEquals( + tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_CONSENTS), tcfEuV2.getVendorConsents()); + Assertions.assertEquals( + tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_LEGITIMATE_INTERESTS), + tcfEuV2.getVendorLegitimateInterests()); + Assertions.assertEquals( + tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_RESTRICTIONS), + tcfEuV2.getPublisherRestrictions()); + Assertions.assertEquals( + tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_PURPOSES_SEGMENT_TYPE), tcfEuV2.getPublisherPurposesSegmentType()); - Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_CONSENTS), tcfEuV2.getPublisherConsents()); - Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_LEGITIMATE_INTERESTS), + Assertions.assertEquals( + tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_CONSENTS), tcfEuV2.getPublisherConsents()); + Assertions.assertEquals( + tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_LEGITIMATE_INTERESTS), tcfEuV2.getPublisherLegitimateInterests()); - Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.NUM_CUSTOM_PURPOSES), tcfEuV2.getNumCustomPurposes()); - Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_CUSTOM_CONSENTS), tcfEuV2.getPublisherCustomConsents()); - Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_CUSTOM_LEGITIMATE_INTERESTS), + Assertions.assertEquals( + tcfEuV2.getFieldValue(TcfEuV2Field.NUM_CUSTOM_PURPOSES), tcfEuV2.getNumCustomPurposes()); + Assertions.assertEquals( + tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_CUSTOM_CONSENTS), + tcfEuV2.getPublisherCustomConsents()); + Assertions.assertEquals( + tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_CUSTOM_LEGITIMATE_INTERESTS), tcfEuV2.getPublisherCustomLegitimateInterests()); - Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.VENDORS_ALLOWED_SEGMENT_TYPE), tcfEuV2.getVendorsAllowedSegmentType()); - Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.VENDORS_ALLOWED), tcfEuV2.getVendorsAllowed()); - Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.VENDORS_DISCLOSED_SEGMENT_TYPE), + Assertions.assertEquals( + tcfEuV2.getFieldValue(TcfEuV2Field.VENDORS_ALLOWED_SEGMENT_TYPE), + tcfEuV2.getVendorsAllowedSegmentType()); + Assertions.assertEquals( + tcfEuV2.getFieldValue(TcfEuV2Field.VENDORS_ALLOWED), tcfEuV2.getVendorsAllowed()); + Assertions.assertEquals( + tcfEuV2.getFieldValue(TcfEuV2Field.VENDORS_DISCLOSED_SEGMENT_TYPE), tcfEuV2.getVendorsDisclosedSegmentType()); - Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.VENDORS_DISCLOSED), tcfEuV2.getVendorsDisclosed()); + Assertions.assertEquals( + tcfEuV2.getFieldValue(TcfEuV2Field.VENDORS_DISCLOSED), tcfEuV2.getVendorsDisclosed()); } @Test public void testDecode4() { - TcfEuV2 tcfEuV2 = new TcfEuV2( - "CPi8wgAPi8wgAAOACBENCuCoAP_AAEfAACiQJHNd_H__bX9n-f7_6ft0eY1f9_r37uQzDhfNk-8F3L_W_LwX_2E7NF36tq4KmR4ku1LBIUNtHMnUDUmxaokVrzHsak2cpzNKJ_BkknsZe2dYGF9vm5tj-QKZ7_5_d3f52T_9_9v-39z33913v3d93-_13LjdV5_9H_v9fR_b8_Kf9_5-_4v8_____3_e______8AEEggCTDVuIAuxLHAm0DCKBECMKwkKoFABBQDC0QGADg4KdlYBPrCBAAgFAEYEQIcAUYEAgAAAgCQiACQIsEAAAIgEAAIAEQiEABAwCCgAsDAIAAQDQMUQoABAkIMiAiKUwICIEggJbKhBKC6Q0wgCrLACgkRsFAAiAAAUgACAsHAMESAlYsECTFG-QAjBCgFEqFaAGGgAwABBI4RABgACCRwqADAAEEjgA"); + TcfEuV2 tcfEuV2 = + new TcfEuV2( + "CPi8wgAPi8wgAAOACBENCuCoAP_AAEfAACiQJHNd_H__bX9n-f7_6ft0eY1f9_r37uQzDhfNk-8F3L_W_LwX_2E7NF36tq4KmR4ku1LBIUNtHMnUDUmxaokVrzHsak2cpzNKJ_BkknsZe2dYGF9vm5tj-QKZ7_5_d3f52T_9_9v-39z33913v3d93-_13LjdV5_9H_v9fR_b8_Kf9_5-_4v8_____3_e______8AEEggCTDVuIAuxLHAm0DCKBECMKwkKoFABBQDC0QGADg4KdlYBPrCBAAgFAEYEQIcAUYEAgAAAgCQiACQIsEAAAIgEAAIAEQiEABAwCCgAsDAIAAQDQMUQoABAkIMiAiKUwICIEggJbKhBKC6Q0wgCrLACgkRsFAAiAAAUgACAsHAMESAlYsECTFG-QAjBCgFEqFaAGGgAwABBI4RABgACCRwqADAAEEjgA"); Assertions.assertEquals(2, tcfEuV2.getFieldValue(TcfEuV2Field.VERSION)); Assertions.assertEquals(14, tcfEuV2.getFieldValue(TcfEuV2Field.CMP_ID)); @@ -260,13 +290,10 @@ public void testDecode4() { Assertions.assertEquals(true, tcfEuV2.getFieldValue(TcfEuV2Field.IS_SERVICE_SPECIFIC)); Assertions.assertEquals(false, tcfEuV2.getFieldValue(TcfEuV2Field.USE_NON_STANDARD_STACKS)); + Assertions.assertEquals(Set.of(1), tcfEuV2.getFieldValue(TcfEuV2Field.SPECIAL_FEATURE_OPTINS)); Assertions.assertEquals( - Set.of(1), - tcfEuV2.getFieldValue(TcfEuV2Field.SPECIAL_FEATURE_OPTINS)); - Assertions - .assertEquals( - Set.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), - tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_CONSENTS)); + Set.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), + tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_CONSENTS)); Assertions.assertEquals( Set.of(2, 6, 7, 8, 9, 10), tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_LEGITIMATE_INTERESTS)); @@ -274,15 +301,18 @@ public void testDecode4() { Assertions.assertEquals(false, tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_ONE_TREATMENT)); Assertions.assertEquals("US", tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_COUNTRY_CODE)); - Assertions.assertEquals(772, ((IntegerSet) tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_CONSENTS)).size()); + Assertions.assertEquals( + 772, ((IntegerSet) tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_CONSENTS)).size()); - Assertions.assertEquals(280, ((IntegerSet) tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_LEGITIMATE_INTERESTS)).size()); + Assertions.assertEquals( + 280, ((IntegerSet) tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_LEGITIMATE_INTERESTS)).size()); } @Test public void testDecode5() { - TcfEuV2 tcfEuV2 = new TcfEuV2( - "CPgA5EAPgA5EAAOACBENCuCoAP_AAEfAACiQI0Nd_H__bX9n-f7_6Pt0cY1f9_r3ruQzDhfFk-8F3L_W3LwX32E7NF36pq4KmR4ku1LBIQFtHMnUDUmxaokVrzHsak2cpyNKI7BkknsZe2dYGF9Pm5lD-QKZ7_5_d3f52T_9_9v-39z339V3v3d93-_12PjdV599H_v9fR_b8_Kf9_5-_4v8___4IQAAAAQQ_AJMNW4gC7EscCbQMIoAQIwrCQqAUAEFAMLRAYAODgpmVgEusIEACAUARgRAhxBRgQCAAACAJCIAJAiwQAIAiAQAAgARAIQAEDAIKACwMAgABANAxACgAECQgyICIpTAgIgSCAlsqEEoKpDTCAKssAKARGwUACIAABSAAICwcAwRICViwQJMUbwAw0AGAAIJHCIAMAAQSOFQAYAAgkcA"); + TcfEuV2 tcfEuV2 = + new TcfEuV2( + "CPgA5EAPgA5EAAOACBENCuCoAP_AAEfAACiQI0Nd_H__bX9n-f7_6Pt0cY1f9_r3ruQzDhfFk-8F3L_W3LwX32E7NF36pq4KmR4ku1LBIQFtHMnUDUmxaokVrzHsak2cpyNKI7BkknsZe2dYGF9Pm5lD-QKZ7_5_d3f52T_9_9v-39z339V3v3d93-_12PjdV599H_v9fR_b8_Kf9_5-_4v8___4IQAAAAQQ_AJMNW4gC7EscCbQMIoAQIwrCQqAUAEFAMLRAYAODgpmVgEusIEACAUARgRAhxBRgQCAAACAJCIAJAiwQAIAiAQAAgARAIQAEDAIKACwMAgABANAxACgAECQgyICIpTAgIgSCAlsqEEoKpDTCAKssAKARGwUACIAABSAAICwcAwRICViwQJMUbwAw0AGAAIJHCIAMAAQSOFQAYAAgkcA"); Assertions.assertEquals(2, tcfEuV2.getFieldValue(TcfEuV2Field.VERSION)); Assertions.assertEquals(14, tcfEuV2.getFieldValue(TcfEuV2Field.CMP_ID)); @@ -294,13 +324,10 @@ public void testDecode5() { Assertions.assertEquals(true, tcfEuV2.getFieldValue(TcfEuV2Field.IS_SERVICE_SPECIFIC)); Assertions.assertEquals(false, tcfEuV2.getFieldValue(TcfEuV2Field.USE_NON_STANDARD_STACKS)); + Assertions.assertEquals(Set.of(1), tcfEuV2.getFieldValue(TcfEuV2Field.SPECIAL_FEATURE_OPTINS)); Assertions.assertEquals( - Set.of(1), - tcfEuV2.getFieldValue(TcfEuV2Field.SPECIAL_FEATURE_OPTINS)); - Assertions - .assertEquals( - Set.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), - tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_CONSENTS)); + Set.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), + tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_CONSENTS)); Assertions.assertEquals( Set.of(2, 6, 7, 8, 9, 10), tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_LEGITIMATE_INTERESTS)); @@ -308,14 +335,18 @@ public void testDecode5() { Assertions.assertEquals(false, tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_ONE_TREATMENT)); Assertions.assertEquals("US", tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_COUNTRY_CODE)); - Assertions.assertEquals(693, ((IntegerSet) tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_CONSENTS)).size()); + Assertions.assertEquals( + 693, ((IntegerSet) tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_CONSENTS)).size()); - Assertions.assertEquals(254, ((IntegerSet) tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_LEGITIMATE_INTERESTS)).size()); + Assertions.assertEquals( + 254, ((IntegerSet) tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_LEGITIMATE_INTERESTS)).size()); } @Test public void testDecode6() { - TcfEuV2 tcfEuV2 = new TcfEuV2("COv_eg6Ov_eg6AOADBENAaCgAP_AAH_AACiQAVEUQQoAIQAqIoghAAQgAA.YAAAAAAAAAAAAAAAAAA"); + TcfEuV2 tcfEuV2 = + new TcfEuV2( + "COv_eg6Ov_eg6AOADBENAaCgAP_AAH_AACiQAVEUQQoAIQAqIoghAAQgAA.YAAAAAAAAAAAAAAAAAA"); Assertions.assertEquals(2, tcfEuV2.getFieldValue(TcfEuV2Field.VERSION)); Assertions.assertEquals(14, tcfEuV2.getFieldValue(TcfEuV2Field.CMP_ID)); @@ -327,13 +358,10 @@ public void testDecode6() { Assertions.assertEquals(true, tcfEuV2.getFieldValue(TcfEuV2Field.IS_SERVICE_SPECIFIC)); Assertions.assertEquals(false, tcfEuV2.getFieldValue(TcfEuV2Field.USE_NON_STANDARD_STACKS)); + Assertions.assertEquals(Set.of(), tcfEuV2.getFieldValue(TcfEuV2Field.SPECIAL_FEATURE_OPTINS)); Assertions.assertEquals( - Set.of(), - tcfEuV2.getFieldValue(TcfEuV2Field.SPECIAL_FEATURE_OPTINS)); - Assertions - .assertEquals( - Set.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), - tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_CONSENTS)); + Set.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), + tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_CONSENTS)); Assertions.assertEquals( Set.of(2, 3, 4, 5, 6, 7, 8, 9, 10), tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_LEGITIMATE_INTERESTS)); @@ -341,20 +369,25 @@ public void testDecode6() { Assertions.assertEquals(false, tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_ONE_TREATMENT)); Assertions.assertEquals("US", tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_COUNTRY_CODE)); - Assertions.assertEquals(Set.of(2, 6, 8, 12, 18, 23, 25, 37, 42), tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_CONSENTS)); + Assertions.assertEquals( + Set.of(2, 6, 8, 12, 18, 23, 25, 37, 42), + tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_CONSENTS)); - Assertions.assertEquals(Set.of(2, 6, 8, 12, 18, 23, 37, 42), + Assertions.assertEquals( + Set.of(2, 6, 8, 12, 18, 23, 37, 42), tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_LEGITIMATE_INTERESTS)); } - + @SuppressWarnings("unchecked") @Test public void testDecode7() throws DecodingException { TcfEuV2 tcfEuV2 = new TcfEuV2("COoC-kUOoC-kUAHABAENAwCoAIAAAELAAAwIF5wAoAAgAGAvMACX_ABBAAQAFA"); Assertions.assertEquals(2, tcfEuV2.getFieldValue(TcfEuV2Field.VERSION)); - Assertions.assertEquals("2019-10-07T05:17:54Z", tcfEuV2.getFieldValue(TcfEuV2Field.CREATED).toString()); - Assertions.assertEquals("2019-10-07T05:17:54Z", tcfEuV2.getFieldValue(TcfEuV2Field.LAST_UPDATED).toString()); + Assertions.assertEquals( + "2019-10-07T05:17:54Z", tcfEuV2.getFieldValue(TcfEuV2Field.CREATED).toString()); + Assertions.assertEquals( + "2019-10-07T05:17:54Z", tcfEuV2.getFieldValue(TcfEuV2Field.LAST_UPDATED).toString()); Assertions.assertEquals(7, tcfEuV2.getFieldValue(TcfEuV2Field.CMP_ID)); Assertions.assertEquals(1, tcfEuV2.getFieldValue(TcfEuV2Field.CMP_VERSION)); Assertions.assertEquals(0, tcfEuV2.getFieldValue(TcfEuV2Field.CONSENT_SCREEN)); @@ -364,42 +397,45 @@ public void testDecode7() throws DecodingException { Assertions.assertEquals(true, tcfEuV2.getFieldValue(TcfEuV2Field.IS_SERVICE_SPECIFIC)); Assertions.assertEquals(false, tcfEuV2.getFieldValue(TcfEuV2Field.USE_NON_STANDARD_STACKS)); + Assertions.assertEquals(Set.of(1), tcfEuV2.getFieldValue(TcfEuV2Field.SPECIAL_FEATURE_OPTINS)); + Assertions.assertEquals(Set.of(1), tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_CONSENTS)); Assertions.assertEquals( - Set.of(1), - tcfEuV2.getFieldValue(TcfEuV2Field.SPECIAL_FEATURE_OPTINS)); - Assertions.assertEquals( - Set.of(1), - tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_CONSENTS)); - Assertions.assertEquals( - Set.of(2, 7, 9, 10), - tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_LEGITIMATE_INTERESTS)); + Set.of(2, 7, 9, 10), tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_LEGITIMATE_INTERESTS)); Assertions.assertEquals(false, tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_ONE_TREATMENT)); Assertions.assertEquals("GB", tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_COUNTRY_CODE)); - Assertions.assertEquals(Set.of(1, 2, 3, 755), tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_CONSENTS)); + Assertions.assertEquals( + Set.of(1, 2, 3, 755), tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_CONSENTS)); - Assertions.assertEquals(Set.of(1, 2, 3, 4, 5, 6, 7, 8, 9), + Assertions.assertEquals( + Set.of(1, 2, 3, 4, 5, 6, 7, 8, 9), tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_LEGITIMATE_INTERESTS)); - - Assertions.assertEquals(1, ((List)tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_RESTRICTIONS)).size()); - RangeEntry rangeEntry = ((List)tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_RESTRICTIONS)).get(0); + + Assertions.assertEquals( + 1, ((List) tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_RESTRICTIONS)).size()); + RangeEntry rangeEntry = + ((List) tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_RESTRICTIONS)).get(0); Assertions.assertEquals(1, rangeEntry.getKey()); Assertions.assertEquals(0, rangeEntry.getType()); Assertions.assertEquals(Set.of(10), rangeEntry.getIds()); } - + @Test() public void testDecodeGarbage1() { - Assertions.assertThrows(DecodingException.class, () -> { - new TcfEuV2("A").getCreated(); - }); + Assertions.assertThrows( + DecodingException.class, + () -> { + new TcfEuV2("A").getCreated(); + }); } - + @Test() public void testDecodeGarbage2() { - Assertions.assertThrows(DecodingException.class, () -> { - new TcfEuV2("z").getCreated(); - }); + Assertions.assertThrows( + DecodingException.class, + () -> { + new TcfEuV2("z").getCreated(); + }); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsCaTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsCaTest.java index 6dcc3fcc..3ef79752 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsCaTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsCaTest.java @@ -1,12 +1,11 @@ package com.iab.gpp.encoder.section; - -import java.util.Arrays; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.ValidationException; import com.iab.gpp.encoder.field.UsCaField; +import java.util.Arrays; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; public class UsCaTest { @@ -26,7 +25,8 @@ public void testEncode2() { usCa.setFieldValue(UsCaField.SENSITIVE_DATA_LIMIT_USE_NOTICE, 1); usCa.setFieldValue(UsCaField.SALE_OPT_OUT, 1); usCa.setFieldValue(UsCaField.SHARING_OPT_OUT, 1); - usCa.setFieldValue(UsCaField.SENSITIVE_DATA_PROCESSING, Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0)); + usCa.setFieldValue( + UsCaField.SENSITIVE_DATA_PROCESSING, Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0)); usCa.setFieldValue(UsCaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, Arrays.asList(2, 1)); usCa.setFieldValue(UsCaField.PERSONAL_DATA_CONSENTS, 1); usCa.setFieldValue(UsCaField.MSPA_COVERED_TRANSACTION, 1); @@ -46,7 +46,8 @@ public void testEncode3() { usCa.setFieldValue(UsCaField.SENSITIVE_DATA_LIMIT_USE_NOTICE, 1); usCa.setFieldValue(UsCaField.SALE_OPT_OUT, 1); usCa.setFieldValue(UsCaField.SHARING_OPT_OUT, 1); - usCa.setFieldValue(UsCaField.SENSITIVE_DATA_PROCESSING, Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0)); + usCa.setFieldValue( + UsCaField.SENSITIVE_DATA_PROCESSING, Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0)); usCa.setFieldValue(UsCaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, Arrays.asList(2, 1)); usCa.setFieldValue(UsCaField.PERSONAL_DATA_CONSENTS, 1); usCa.setFieldValue(UsCaField.MSPA_COVERED_TRANSACTION, 1); @@ -56,7 +57,7 @@ public void testEncode3() { Assertions.assertEquals("BVWSSSVY.YA", usCa.encode()); } - + @Test public void testSetInvalidValues() { UsCa usCa = new UsCa(); @@ -65,80 +66,81 @@ public void testSetInvalidValues() { usCa.setFieldValue(UsCaField.SALE_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usCa.setFieldValue(UsCaField.SHARING_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usCa.setFieldValue(UsCaField.SENSITIVE_DATA_LIMIT_USE_NOTICE, -1); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usCa.setFieldValue(UsCaField.SALE_OPT_OUT, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usCa.setFieldValue(UsCaField.SHARING_OPT_OUT, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { - usCa.setFieldValue(UsCaField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 0, 0, 0, 3, 0, 0, 0, 0)); + usCa.setFieldValue( + UsCaField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 0, 0, 0, 3, 0, 0, 0, 0)); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usCa.setFieldValue(UsCaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, Arrays.asList(0, 3)); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usCa.setFieldValue(UsCaField.PERSONAL_DATA_CONSENTS, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usCa.setFieldValue(UsCaField.MSPA_COVERED_TRANSACTION, 0); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usCa.setFieldValue(UsCaField.MSPA_OPT_OUT_OPTION_MODE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usCa.setFieldValue(UsCaField.MSPA_SERVICE_PROVIDER_MODE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } } - + @Test public void testEncodeWithGpcSegmentExcluded() { @@ -156,7 +158,8 @@ public void testDecode1() { Assertions.assertEquals(1, usCa.getSensitiveDataLimitUseNotice()); Assertions.assertEquals(1, usCa.getSaleOptOut()); Assertions.assertEquals(1, usCa.getSharingOptOut()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0), usCa.getSensitiveDataProcessing()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0), usCa.getSensitiveDataProcessing()); Assertions.assertEquals(Arrays.asList(2, 1), usCa.getKnownChildSensitiveDataConsents()); Assertions.assertEquals(1, usCa.getPersonalDataConsents()); Assertions.assertEquals(1, usCa.getMspaCoveredTransaction()); @@ -174,7 +177,8 @@ public void testDecodeWithGpcSegmentExcluded() { Assertions.assertEquals(1, usCa.getSensitiveDataLimitUseNotice()); Assertions.assertEquals(1, usCa.getSaleOptOut()); Assertions.assertEquals(1, usCa.getSharingOptOut()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0), usCa.getSensitiveDataProcessing()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0), usCa.getSensitiveDataProcessing()); Assertions.assertEquals(Arrays.asList(2, 1), usCa.getKnownChildSensitiveDataConsents()); Assertions.assertEquals(1, usCa.getPersonalDataConsents()); Assertions.assertEquals(1, usCa.getMspaCoveredTransaction()); @@ -182,11 +186,13 @@ public void testDecodeWithGpcSegmentExcluded() { Assertions.assertEquals(2, usCa.getMspaServiceProviderMode()); Assertions.assertEquals(false, usCa.getGpcSegmentIncluded()); } - + @Test() public void testDecodeGarbage() { - Assertions.assertThrows(DecodingException.class, () -> { - new UsCa("z").getPersonalDataConsents(); - }); + Assertions.assertThrows( + DecodingException.class, + () -> { + new UsCa("z").getPersonalDataConsents(); + }); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsCoTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsCoTest.java index 59488ff1..38d62643 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsCoTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsCoTest.java @@ -1,12 +1,11 @@ package com.iab.gpp.encoder.section; - -import java.util.Arrays; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.ValidationException; import com.iab.gpp.encoder.field.UsCoField; +import java.util.Arrays; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; public class UsCoTest { @@ -34,7 +33,7 @@ public void testEncode2() { Assertions.assertEquals("BVWSSVg.YA", usCo.encode()); } - + @Test public void testSetInvalidValues() { UsCo usCo = new UsCo(); @@ -43,72 +42,71 @@ public void testSetInvalidValues() { usCo.setFieldValue(UsCoField.SHARING_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usCo.setFieldValue(UsCoField.SALE_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usCo.setFieldValue(UsCoField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usCo.setFieldValue(UsCoField.SALE_OPT_OUT, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usCo.setFieldValue(UsCoField.TARGETED_ADVERTISING_OPT_OUT, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usCo.setFieldValue(UsCoField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 0, 1, 2)); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usCo.setFieldValue(UsCoField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usCo.setFieldValue(UsCoField.MSPA_COVERED_TRANSACTION, 0); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usCo.setFieldValue(UsCoField.MSPA_OPT_OUT_OPTION_MODE, -1); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usCo.setFieldValue(UsCoField.MSPA_SERVICE_PROVIDER_MODE, 5); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - - } + } } @Test @@ -151,11 +149,13 @@ public void testDecodeWithGpcSegmentExcluded() { Assertions.assertEquals(2, usCo.getMspaServiceProviderMode()); Assertions.assertEquals(false, usCo.getGpcSegmentIncluded()); } - + @Test() public void testDecodeGarbage() { - Assertions.assertThrows(DecodingException.class, () -> { - new UsCo("z").getTargetedAdvertisingOptOut(); - }); + Assertions.assertThrows( + DecodingException.class, + () -> { + new UsCo("z").getTargetedAdvertisingOptOut(); + }); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsCtTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsCtTest.java index 03ea9f9b..1dd4877e 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsCtTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsCtTest.java @@ -1,12 +1,11 @@ package com.iab.gpp.encoder.section; - -import java.util.Arrays; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.ValidationException; import com.iab.gpp.encoder.field.UsCtField; +import java.util.Arrays; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; public class UsCtTest { @@ -34,7 +33,7 @@ public void testEncode2() { Assertions.assertEquals("BVWSSZFg.YA", usCt.encode()); } - + @Test public void testSetInvalidValues() { UsCt usCt = new UsCt(); @@ -43,70 +42,71 @@ public void testSetInvalidValues() { usCt.setFieldValue(UsCtField.SHARING_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usCt.setFieldValue(UsCtField.SALE_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usCt.setFieldValue(UsCtField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usCt.setFieldValue(UsCtField.SALE_OPT_OUT, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usCt.setFieldValue(UsCtField.TARGETED_ADVERTISING_OPT_OUT, -1); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { - usCt.setFieldValue(UsCtField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 1, 2, 0, 1)); + usCt.setFieldValue( + UsCtField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 1, 2, 0, 1)); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usCt.setFieldValue(UsCtField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, Arrays.asList(1, 2, 3)); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usCt.setFieldValue(UsCtField.MSPA_COVERED_TRANSACTION, 0); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usCt.setFieldValue(UsCtField.MSPA_OPT_OUT_OPTION_MODE, 4); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usCt.setFieldValue(UsCtField.MSPA_SERVICE_PROVIDER_MODE, -1); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } } @@ -126,7 +126,8 @@ public void testDecode1() throws DecodingException { Assertions.assertEquals(1, usCt.getTargetedAdvertisingOptOutNotice()); Assertions.assertEquals(1, usCt.getSaleOptOut()); Assertions.assertEquals(1, usCt.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usCt.getSensitiveDataProcessing()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usCt.getSensitiveDataProcessing()); Assertions.assertEquals(Arrays.asList(2, 1, 0), usCt.getKnownChildSensitiveDataConsents()); Assertions.assertEquals(1, usCt.getMspaCoveredTransaction()); Assertions.assertEquals(1, usCt.getMspaOptOutOptionMode()); @@ -143,18 +144,21 @@ public void testDecodeWithGpcSegmentExcluded() throws DecodingException { Assertions.assertEquals(1, usCt.getTargetedAdvertisingOptOutNotice()); Assertions.assertEquals(1, usCt.getSaleOptOut()); Assertions.assertEquals(1, usCt.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usCt.getSensitiveDataProcessing()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usCt.getSensitiveDataProcessing()); Assertions.assertEquals(Arrays.asList(2, 1, 0), usCt.getKnownChildSensitiveDataConsents()); Assertions.assertEquals(1, usCt.getMspaCoveredTransaction()); Assertions.assertEquals(1, usCt.getMspaOptOutOptionMode()); Assertions.assertEquals(2, usCt.getMspaServiceProviderMode()); Assertions.assertEquals(false, usCt.getGpcSegmentIncluded()); } - + @Test() public void testDecodeGarbage() { - Assertions.assertThrows(DecodingException.class, () -> { - new UsCt("z").getSharingNotice(); - }); + Assertions.assertThrows( + DecodingException.class, + () -> { + new UsCt("z").getSharingNotice(); + }); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsDeTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsDeTest.java index 30341616..dfc6c081 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsDeTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsDeTest.java @@ -1,12 +1,11 @@ package com.iab.gpp.encoder.section; - -import java.util.Arrays; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.ValidationException; import com.iab.gpp.encoder.field.UsDeField; +import java.util.Arrays; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; public class UsDeTest { @@ -25,7 +24,8 @@ public void testEncode2() { usDe.setFieldValue(UsDeField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, 1); usDe.setFieldValue(UsDeField.SALE_OPT_OUT, 1); usDe.setFieldValue(UsDeField.TARGETED_ADVERTISING_OPT_OUT, 1); - usDe.setFieldValue(UsDeField.SENSITIVE_DATA_PROCESSING, Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0)); + usDe.setFieldValue( + UsDeField.SENSITIVE_DATA_PROCESSING, Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0)); usDe.setFieldValue(UsDeField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, Arrays.asList(2, 1, 0, 2, 1)); usDe.setFieldValue(UsDeField.ADDITIONAL_DATA_PROCESSING_CONSENT, 1); usDe.setFieldValue(UsDeField.MSPA_COVERED_TRANSACTION, 1); @@ -35,7 +35,7 @@ public void testEncode2() { Assertions.assertEquals("BVWSSSSVYA.YA", usDe.encode()); } - + @Test public void testSetInvalidValues() { UsDe usDe = new UsDe(); @@ -44,77 +44,78 @@ public void testSetInvalidValues() { usDe.setFieldValue(UsDeField.PROCESSING_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usDe.setFieldValue(UsDeField.SALE_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usDe.setFieldValue(UsDeField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usDe.setFieldValue(UsDeField.SALE_OPT_OUT, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usDe.setFieldValue(UsDeField.TARGETED_ADVERTISING_OPT_OUT, -1); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { - usDe.setFieldValue(UsDeField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 1, 2, 0, 1)); + usDe.setFieldValue( + UsDeField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 1, 2, 0, 1)); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usDe.setFieldValue(UsDeField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, Arrays.asList(1, 2, 3)); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usDe.setFieldValue(UsDeField.ADDITIONAL_DATA_PROCESSING_CONSENT, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usDe.setFieldValue(UsDeField.MSPA_COVERED_TRANSACTION, 0); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usDe.setFieldValue(UsDeField.MSPA_OPT_OUT_OPTION_MODE, 4); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usDe.setFieldValue(UsDeField.MSPA_SERVICE_PROVIDER_MODE, -1); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } } @@ -134,8 +135,10 @@ public void testDecode1() throws DecodingException { Assertions.assertEquals(1, usDe.getTargetedAdvertisingOptOutNotice()); Assertions.assertEquals(1, usDe.getSaleOptOut()); Assertions.assertEquals(1, usDe.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0), usDe.getSensitiveDataProcessing()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1), usDe.getKnownChildSensitiveDataConsents()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0), usDe.getSensitiveDataProcessing()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1), usDe.getKnownChildSensitiveDataConsents()); Assertions.assertEquals(1, usDe.getAdditionalDataProcessingConsent()); Assertions.assertEquals(1, usDe.getMspaCoveredTransaction()); Assertions.assertEquals(1, usDe.getMspaOptOutOptionMode()); @@ -152,19 +155,23 @@ public void testDecodeWithGpcSegmentExcluded() throws DecodingException { Assertions.assertEquals(1, usDe.getTargetedAdvertisingOptOutNotice()); Assertions.assertEquals(1, usDe.getSaleOptOut()); Assertions.assertEquals(1, usDe.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0), usDe.getSensitiveDataProcessing()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1), usDe.getKnownChildSensitiveDataConsents()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0), usDe.getSensitiveDataProcessing()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1), usDe.getKnownChildSensitiveDataConsents()); Assertions.assertEquals(1, usDe.getAdditionalDataProcessingConsent()); Assertions.assertEquals(1, usDe.getMspaCoveredTransaction()); Assertions.assertEquals(1, usDe.getMspaOptOutOptionMode()); Assertions.assertEquals(2, usDe.getMspaServiceProviderMode()); Assertions.assertEquals(false, usDe.getGpcSegmentIncluded()); } - + @Test() public void testDecodeGarbage() { - Assertions.assertThrows(DecodingException.class, () -> { - new UsDe("z").getProcessingNotice(); - }); + Assertions.assertThrows( + DecodingException.class, + () -> { + new UsDe("z").getProcessingNotice(); + }); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsFlTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsFlTest.java index 3882d962..fe4158ad 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsFlTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsFlTest.java @@ -1,14 +1,13 @@ package com.iab.gpp.encoder.section; - -import java.util.Arrays; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.error.InvalidFieldException; import com.iab.gpp.encoder.error.ValidationException; import com.iab.gpp.encoder.field.UsFlField; +import java.util.Arrays; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; public class UsFlTest { @@ -28,7 +27,8 @@ public void testEncode2() { usFl.setFieldValue(UsFlField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, 1); usFl.setFieldValue(UsFlField.SALE_OPT_OUT, 1); usFl.setFieldValue(UsFlField.TARGETED_ADVERTISING_OPT_OUT, 1); - usFl.setFieldValue(UsFlField.SENSITIVE_DATA_PROCESSING, Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1)); + usFl.setFieldValue( + UsFlField.SENSITIVE_DATA_PROCESSING, Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1)); usFl.setFieldValue(UsFlField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, Arrays.asList(2, 1, 2)); usFl.setFieldValue(UsFlField.ADDITIONAL_DATA_PROCESSING_CONSENT, 1); usFl.setFieldValue(UsFlField.MSPA_COVERED_TRANSACTION, 1); @@ -81,7 +81,8 @@ public void testSetInvalidValues() { } try { - usFl.setFieldValue(UsFlField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 1, 2, 0, 1)); + usFl.setFieldValue( + UsFlField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 1, 2, 0, 1)); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { @@ -121,7 +122,6 @@ public void testSetInvalidValues() { } catch (ValidationException e) { } - } @Test @@ -133,18 +133,21 @@ public void testDecode1() throws DecodingException { Assertions.assertEquals(1, usFl.getTargetedAdvertisingOptOutNotice()); Assertions.assertEquals(1, usFl.getSaleOptOut()); Assertions.assertEquals(1, usFl.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usFl.getSensitiveDataProcessing()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usFl.getSensitiveDataProcessing()); Assertions.assertEquals(Arrays.asList(2, 1, 2), usFl.getKnownChildSensitiveDataConsents()); Assertions.assertEquals(1, usFl.getAdditionalDataProcessingConsent()); Assertions.assertEquals(1, usFl.getMspaCoveredTransaction()); Assertions.assertEquals(1, usFl.getMspaOptOutOptionMode()); Assertions.assertEquals(2, usFl.getMspaServiceProviderMode()); } - + @Test() public void testDecodeGarbage() { - Assertions.assertThrows(DecodingException.class, () -> { - new UsFl("z").getMspaCoveredTransaction(); - }); + Assertions.assertThrows( + DecodingException.class, + () -> { + new UsFl("z").getMspaCoveredTransaction(); + }); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsIaTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsIaTest.java index 4171eac1..6bd6b053 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsIaTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsIaTest.java @@ -1,12 +1,11 @@ package com.iab.gpp.encoder.section; - -import java.util.Arrays; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.ValidationException; import com.iab.gpp.encoder.field.UsIaField; +import java.util.Arrays; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; public class UsIaTest { @@ -35,7 +34,7 @@ public void testEncode2() { Assertions.assertEquals("BVVkklWA.YA", usIa.encode()); } - + @Test public void testSetInvalidValues() { UsIa usIa = new UsIa(); @@ -44,77 +43,78 @@ public void testSetInvalidValues() { usIa.setFieldValue(UsIaField.PROCESSING_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usIa.setFieldValue(UsIaField.SALE_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usIa.setFieldValue(UsIaField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usIa.setFieldValue(UsIaField.SENSITIVE_DATA_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usIa.setFieldValue(UsIaField.SALE_OPT_OUT, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usIa.setFieldValue(UsIaField.TARGETED_ADVERTISING_OPT_OUT, -1); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { - usIa.setFieldValue(UsIaField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 1, 2, 0, 1)); + usIa.setFieldValue( + UsIaField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 1, 2, 0, 1)); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usIa.setFieldValue(UsIaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usIa.setFieldValue(UsIaField.MSPA_COVERED_TRANSACTION, 0); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usIa.setFieldValue(UsIaField.MSPA_OPT_OUT_OPTION_MODE, 4); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usIa.setFieldValue(UsIaField.MSPA_SERVICE_PROVIDER_MODE, -1); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } } @@ -135,7 +135,8 @@ public void testDecode1() throws DecodingException { Assertions.assertEquals(1, usIa.getSensitiveDataOptOutNotice()); Assertions.assertEquals(1, usIa.getSaleOptOut()); Assertions.assertEquals(1, usIa.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usIa.getSensitiveDataProcessing()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usIa.getSensitiveDataProcessing()); Assertions.assertEquals(1, usIa.getKnownChildSensitiveDataConsents()); Assertions.assertEquals(1, usIa.getMspaCoveredTransaction()); Assertions.assertEquals(1, usIa.getMspaOptOutOptionMode()); @@ -153,18 +154,21 @@ public void testDecodeWithGpcSegmentExcluded() throws DecodingException { Assertions.assertEquals(1, usIa.getSensitiveDataOptOutNotice()); Assertions.assertEquals(1, usIa.getSaleOptOut()); Assertions.assertEquals(1, usIa.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usIa.getSensitiveDataProcessing()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usIa.getSensitiveDataProcessing()); Assertions.assertEquals(1, usIa.getKnownChildSensitiveDataConsents()); Assertions.assertEquals(1, usIa.getMspaCoveredTransaction()); Assertions.assertEquals(1, usIa.getMspaOptOutOptionMode()); Assertions.assertEquals(2, usIa.getMspaServiceProviderMode()); Assertions.assertEquals(false, usIa.getGpcSegmentIncluded()); } - + @Test() public void testDecodeGarbage() { - Assertions.assertThrows(DecodingException.class, () -> { - new UsIa("z").getProcessingNotice(); - }); + Assertions.assertThrows( + DecodingException.class, + () -> { + new UsIa("z").getProcessingNotice(); + }); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsMtTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsMtTest.java index aaceb049..8e951bd1 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsMtTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsMtTest.java @@ -1,12 +1,11 @@ package com.iab.gpp.encoder.section; - -import java.util.Arrays; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.ValidationException; import com.iab.gpp.encoder.field.UsMtField; +import java.util.Arrays; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; public class UsMtTest { @@ -35,7 +34,7 @@ public void testEncode2() { Assertions.assertEquals("BVWSSZFY.YA", usMt.encode()); } - + @Test public void testSetInvalidValues() { UsMt usMt = new UsMt(); @@ -44,77 +43,78 @@ public void testSetInvalidValues() { usMt.setFieldValue(UsMtField.SHARING_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usMt.setFieldValue(UsMtField.SALE_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usMt.setFieldValue(UsMtField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usMt.setFieldValue(UsMtField.SALE_OPT_OUT, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usMt.setFieldValue(UsMtField.TARGETED_ADVERTISING_OPT_OUT, -1); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { - usMt.setFieldValue(UsMtField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 1, 2, 0, 1)); + usMt.setFieldValue( + UsMtField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 1, 2, 0, 1)); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usMt.setFieldValue(UsMtField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, Arrays.asList(1, 2, 3)); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usMt.setFieldValue(UsMtField.ADDITIONAL_DATA_PROCESSING_CONSENT, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usMt.setFieldValue(UsMtField.MSPA_COVERED_TRANSACTION, 0); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usMt.setFieldValue(UsMtField.MSPA_OPT_OUT_OPTION_MODE, 4); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usMt.setFieldValue(UsMtField.MSPA_SERVICE_PROVIDER_MODE, -1); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } } @@ -134,7 +134,8 @@ public void testDecode1() throws DecodingException { Assertions.assertEquals(1, usMt.getTargetedAdvertisingOptOutNotice()); Assertions.assertEquals(1, usMt.getSaleOptOut()); Assertions.assertEquals(1, usMt.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usMt.getSensitiveDataProcessing()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usMt.getSensitiveDataProcessing()); Assertions.assertEquals(Arrays.asList(2, 1, 0), usMt.getKnownChildSensitiveDataConsents()); Assertions.assertEquals(1, usMt.getAdditionalDataProcessingConsent()); Assertions.assertEquals(1, usMt.getMspaCoveredTransaction()); @@ -152,7 +153,8 @@ public void testDecodeWithGpcSegmentExcluded() throws DecodingException { Assertions.assertEquals(1, usMt.getTargetedAdvertisingOptOutNotice()); Assertions.assertEquals(1, usMt.getSaleOptOut()); Assertions.assertEquals(1, usMt.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usMt.getSensitiveDataProcessing()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usMt.getSensitiveDataProcessing()); Assertions.assertEquals(Arrays.asList(2, 1, 0), usMt.getKnownChildSensitiveDataConsents()); Assertions.assertEquals(1, usMt.getAdditionalDataProcessingConsent()); Assertions.assertEquals(1, usMt.getMspaCoveredTransaction()); @@ -160,11 +162,13 @@ public void testDecodeWithGpcSegmentExcluded() throws DecodingException { Assertions.assertEquals(2, usMt.getMspaServiceProviderMode()); Assertions.assertEquals(false, usMt.getGpcSegmentIncluded()); } - + @Test() public void testDecodeGarbage() { - Assertions.assertThrows(DecodingException.class, () -> { - new UsMt("z").getSharingNotice(); - }); + Assertions.assertThrows( + DecodingException.class, + () -> { + new UsMt("z").getSharingNotice(); + }); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNatTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNatTest.java index 67029545..ec549ad4 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNatTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNatTest.java @@ -1,12 +1,11 @@ package com.iab.gpp.encoder.section; - -import java.util.Arrays; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.ValidationException; import com.iab.gpp.encoder.field.UsNatField; +import java.util.Arrays; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; public class UsNatTest { @@ -30,7 +29,9 @@ public void testEncode2() { usNat.setFieldValue(UsNatField.SALE_OPT_OUT, 1); usNat.setFieldValue(UsNatField.SHARING_OPT_OUT, 1); usNat.setFieldValue(UsNatField.TARGETED_ADVERTISING_OPT_OUT, 1); - usNat.setFieldValue(UsNatField.SENSITIVE_DATA_PROCESSING, Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2)); + usNat.setFieldValue( + UsNatField.SENSITIVE_DATA_PROCESSING, + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2)); usNat.setFieldValue(UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, Arrays.asList(2, 1, 0)); usNat.setFieldValue(UsNatField.PERSONAL_DATA_CONSENTS, 1); usNat.setFieldValue(UsNatField.MSPA_COVERED_TRANSACTION, 1); @@ -40,7 +41,7 @@ public void testEncode2() { Assertions.assertEquals("BVVVkkkkkpFY.YA", usNat.encode()); } - + @Test public void testSetInvalidValues() { UsNat usNat = new UsNat(); @@ -49,108 +50,107 @@ public void testSetInvalidValues() { usNat.setFieldValue(UsNatField.SHARING_NOTICE, -1); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNat.setFieldValue(UsNatField.SALE_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNat.setFieldValue(UsNatField.SHARING_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNat.setFieldValue(UsNatField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, 4); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNat.setFieldValue(UsNatField.SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNat.setFieldValue(UsNatField.SENSITIVE_DATA_LIMIT_USE_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNat.setFieldValue(UsNatField.SALE_OPT_OUT, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNat.setFieldValue(UsNatField.SHARING_OPT_OUT, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNat.setFieldValue(UsNatField.TARGETED_ADVERTISING_OPT_OUT, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { - usNat.setFieldValue(UsNatField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 0, 1, 2, 0, 0, 1, 2, 0)); + usNat.setFieldValue( + UsNatField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 0, 1, 2, 0, 0, 1, 2, 0)); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNat.setFieldValue(UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, Arrays.asList(0, 3)); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNat.setFieldValue(UsNatField.PERSONAL_DATA_CONSENTS, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNat.setFieldValue(UsNatField.MSPA_COVERED_TRANSACTION, 0); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNat.setFieldValue(UsNatField.MSPA_OPT_OUT_OPTION_MODE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNat.setFieldValue(UsNatField.MSPA_SERVICE_PROVIDER_MODE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - - } @Test @@ -166,7 +166,9 @@ public void testEncode3() { usNat.setFieldValue(UsNatField.SALE_OPT_OUT, 1); usNat.setFieldValue(UsNatField.SHARING_OPT_OUT, 1); usNat.setFieldValue(UsNatField.TARGETED_ADVERTISING_OPT_OUT, 1); - usNat.setFieldValue(UsNatField.SENSITIVE_DATA_PROCESSING, Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2)); + usNat.setFieldValue( + UsNatField.SENSITIVE_DATA_PROCESSING, + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2)); usNat.setFieldValue(UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, Arrays.asList(2, 1, 0)); usNat.setFieldValue(UsNatField.PERSONAL_DATA_CONSENTS, 1); usNat.setFieldValue(UsNatField.MSPA_COVERED_TRANSACTION, 1); @@ -198,7 +200,9 @@ public void testDecode1() throws DecodingException { Assertions.assertEquals(1, usNat.getSaleOptOut()); Assertions.assertEquals(1, usNat.getSharingOptOut()); Assertions.assertEquals(1, usNat.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2), usNat.getSensitiveDataProcessing()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2), + usNat.getSensitiveDataProcessing()); Assertions.assertEquals(Arrays.asList(2, 1, 0), usNat.getKnownChildSensitiveDataConsents()); Assertions.assertEquals(1, usNat.getPersonalDataConsents()); Assertions.assertEquals(1, usNat.getMspaCoveredTransaction()); @@ -220,7 +224,9 @@ public void testDecodeWithGpcSegmentExcluded() throws DecodingException { Assertions.assertEquals(1, usNat.getSaleOptOut()); Assertions.assertEquals(1, usNat.getSharingOptOut()); Assertions.assertEquals(1, usNat.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2), usNat.getSensitiveDataProcessing()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2), + usNat.getSensitiveDataProcessing()); Assertions.assertEquals(Arrays.asList(2, 1, 0), usNat.getKnownChildSensitiveDataConsents()); Assertions.assertEquals(1, usNat.getPersonalDataConsents()); Assertions.assertEquals(1, usNat.getMspaCoveredTransaction()); @@ -228,11 +234,13 @@ public void testDecodeWithGpcSegmentExcluded() throws DecodingException { Assertions.assertEquals(2, usNat.getMspaServiceProviderMode()); Assertions.assertEquals(false, usNat.getGpcSegmentIncluded()); } - + @Test() public void testDecodeGarbage() { - Assertions.assertThrows(DecodingException.class, () -> { - new UsNat("z").getSharingNotice(); - }); + Assertions.assertThrows( + DecodingException.class, + () -> { + new UsNat("z").getSharingNotice(); + }); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNeTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNeTest.java index e9e25743..10b6e816 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNeTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNeTest.java @@ -1,12 +1,11 @@ package com.iab.gpp.encoder.section; - -import java.util.Arrays; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.ValidationException; import com.iab.gpp.encoder.field.UsNeField; +import java.util.Arrays; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; public class UsNeTest { @@ -35,7 +34,7 @@ public void testEncode2() { Assertions.assertEquals("BVWSSVWA.YA", usNe.encode()); } - + @Test public void testSetInvalidValues() { UsNe usNe = new UsNe(); @@ -44,77 +43,78 @@ public void testSetInvalidValues() { usNe.setFieldValue(UsNeField.PROCESSING_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNe.setFieldValue(UsNeField.SALE_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNe.setFieldValue(UsNeField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNe.setFieldValue(UsNeField.SALE_OPT_OUT, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNe.setFieldValue(UsNeField.TARGETED_ADVERTISING_OPT_OUT, -1); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { - usNe.setFieldValue(UsNeField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 1, 2, 0, 1)); + usNe.setFieldValue( + UsNeField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 1, 2, 0, 1)); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNe.setFieldValue(UsNeField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNe.setFieldValue(UsNeField.ADDITIONAL_DATA_PROCESSING_CONSENT, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNe.setFieldValue(UsNeField.MSPA_COVERED_TRANSACTION, 0); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNe.setFieldValue(UsNeField.MSPA_OPT_OUT_OPTION_MODE, 4); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNe.setFieldValue(UsNeField.MSPA_SERVICE_PROVIDER_MODE, -1); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } } @@ -134,7 +134,8 @@ public void testDecode1() throws DecodingException { Assertions.assertEquals(1, usNe.getTargetedAdvertisingOptOutNotice()); Assertions.assertEquals(1, usNe.getSaleOptOut()); Assertions.assertEquals(1, usNe.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usNe.getSensitiveDataProcessing()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usNe.getSensitiveDataProcessing()); Assertions.assertEquals(1, usNe.getKnownChildSensitiveDataConsents()); Assertions.assertEquals(1, usNe.getAdditionalDataProcessingConsent()); Assertions.assertEquals(1, usNe.getMspaCoveredTransaction()); @@ -152,7 +153,8 @@ public void testDecodeWithGpcSegmentExcluded() throws DecodingException { Assertions.assertEquals(1, usNe.getTargetedAdvertisingOptOutNotice()); Assertions.assertEquals(1, usNe.getSaleOptOut()); Assertions.assertEquals(1, usNe.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usNe.getSensitiveDataProcessing()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usNe.getSensitiveDataProcessing()); Assertions.assertEquals(1, usNe.getKnownChildSensitiveDataConsents()); Assertions.assertEquals(1, usNe.getAdditionalDataProcessingConsent()); Assertions.assertEquals(1, usNe.getMspaCoveredTransaction()); @@ -160,11 +162,13 @@ public void testDecodeWithGpcSegmentExcluded() throws DecodingException { Assertions.assertEquals(2, usNe.getMspaServiceProviderMode()); Assertions.assertEquals(false, usNe.getGpcSegmentIncluded()); } - + @Test() public void testDecodeGarbage() { - Assertions.assertThrows(DecodingException.class, () -> { - new UsNe("z").getProcessingNotice(); - }); + Assertions.assertThrows( + DecodingException.class, + () -> { + new UsNe("z").getProcessingNotice(); + }); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNhTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNhTest.java index 3211f9fc..805166c3 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNhTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNhTest.java @@ -1,12 +1,11 @@ package com.iab.gpp.encoder.section; - -import java.util.Arrays; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.ValidationException; import com.iab.gpp.encoder.field.UsNhField; +import java.util.Arrays; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; public class UsNhTest { @@ -35,7 +34,7 @@ public void testEncode2() { Assertions.assertEquals("BVWSSZFY.YA", usNh.encode()); } - + @Test public void testSetInvalidValues() { UsNh usNh = new UsNh(); @@ -44,77 +43,78 @@ public void testSetInvalidValues() { usNh.setFieldValue(UsNhField.PROCESSING_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNh.setFieldValue(UsNhField.SALE_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNh.setFieldValue(UsNhField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNh.setFieldValue(UsNhField.SALE_OPT_OUT, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNh.setFieldValue(UsNhField.TARGETED_ADVERTISING_OPT_OUT, -1); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { - usNh.setFieldValue(UsNhField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 1, 2, 0, 1)); + usNh.setFieldValue( + UsNhField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 1, 2, 0, 1)); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNh.setFieldValue(UsNhField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, Arrays.asList(1, 2, 3)); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNh.setFieldValue(UsNhField.ADDITIONAL_DATA_PROCESSING_CONSENT, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNh.setFieldValue(UsNhField.MSPA_COVERED_TRANSACTION, 0); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNh.setFieldValue(UsNhField.MSPA_OPT_OUT_OPTION_MODE, 4); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNh.setFieldValue(UsNhField.MSPA_SERVICE_PROVIDER_MODE, -1); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } } @@ -134,7 +134,8 @@ public void testDecode1() throws DecodingException { Assertions.assertEquals(1, usNh.getTargetedAdvertisingOptOutNotice()); Assertions.assertEquals(1, usNh.getSaleOptOut()); Assertions.assertEquals(1, usNh.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usNh.getSensitiveDataProcessing()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usNh.getSensitiveDataProcessing()); Assertions.assertEquals(Arrays.asList(2, 1, 0), usNh.getKnownChildSensitiveDataConsents()); Assertions.assertEquals(1, usNh.getAdditionalDataProcessingConsent()); Assertions.assertEquals(1, usNh.getMspaCoveredTransaction()); @@ -152,7 +153,8 @@ public void testDecodeWithGpcSegmentExcluded() throws DecodingException { Assertions.assertEquals(1, usNh.getTargetedAdvertisingOptOutNotice()); Assertions.assertEquals(1, usNh.getSaleOptOut()); Assertions.assertEquals(1, usNh.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usNh.getSensitiveDataProcessing()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usNh.getSensitiveDataProcessing()); Assertions.assertEquals(Arrays.asList(2, 1, 0), usNh.getKnownChildSensitiveDataConsents()); Assertions.assertEquals(1, usNh.getAdditionalDataProcessingConsent()); Assertions.assertEquals(1, usNh.getMspaCoveredTransaction()); @@ -160,11 +162,13 @@ public void testDecodeWithGpcSegmentExcluded() throws DecodingException { Assertions.assertEquals(2, usNh.getMspaServiceProviderMode()); Assertions.assertEquals(false, usNh.getGpcSegmentIncluded()); } - + @Test() public void testDecodeGarbage() { - Assertions.assertThrows(DecodingException.class, () -> { - new UsNh("z").getProcessingNotice(); - }); + Assertions.assertThrows( + DecodingException.class, + () -> { + new UsNh("z").getProcessingNotice(); + }); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNjTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNjTest.java index afda60bb..b32b0cee 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNjTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNjTest.java @@ -1,12 +1,11 @@ package com.iab.gpp.encoder.section; - -import java.util.Arrays; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.ValidationException; import com.iab.gpp.encoder.field.UsNjField; +import java.util.Arrays; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; public class UsNjTest { @@ -25,7 +24,8 @@ public void testEncode2() { usNj.setFieldValue(UsNjField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, 1); usNj.setFieldValue(UsNjField.SALE_OPT_OUT, 1); usNj.setFieldValue(UsNjField.TARGETED_ADVERTISING_OPT_OUT, 1); - usNj.setFieldValue(UsNjField.SENSITIVE_DATA_PROCESSING, Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0, 1)); + usNj.setFieldValue( + UsNjField.SENSITIVE_DATA_PROCESSING, Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0, 1)); usNj.setFieldValue(UsNjField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, Arrays.asList(2, 1, 0, 2, 1)); usNj.setFieldValue(UsNjField.ADDITIONAL_DATA_PROCESSING_CONSENT, 1); usNj.setFieldValue(UsNjField.MSPA_COVERED_TRANSACTION, 1); @@ -35,7 +35,7 @@ public void testEncode2() { Assertions.assertEquals("BVWSSRklWA.YA", usNj.encode()); } - + @Test public void testSetInvalidValues() { UsNj usNj = new UsNj(); @@ -44,77 +44,78 @@ public void testSetInvalidValues() { usNj.setFieldValue(UsNjField.PROCESSING_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNj.setFieldValue(UsNjField.SALE_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNj.setFieldValue(UsNjField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNj.setFieldValue(UsNjField.SALE_OPT_OUT, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNj.setFieldValue(UsNjField.TARGETED_ADVERTISING_OPT_OUT, -1); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { - usNj.setFieldValue(UsNjField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 1, 2, 0, 1)); + usNj.setFieldValue( + UsNjField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 1, 2, 0, 1)); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNj.setFieldValue(UsNjField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, Arrays.asList(1, 2, 3)); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNj.setFieldValue(UsNjField.ADDITIONAL_DATA_PROCESSING_CONSENT, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNj.setFieldValue(UsNjField.MSPA_COVERED_TRANSACTION, 0); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNj.setFieldValue(UsNjField.MSPA_OPT_OUT_OPTION_MODE, 4); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNj.setFieldValue(UsNjField.MSPA_SERVICE_PROVIDER_MODE, -1); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } } @@ -134,8 +135,10 @@ public void testDecode1() throws DecodingException { Assertions.assertEquals(1, usNj.getTargetedAdvertisingOptOutNotice()); Assertions.assertEquals(1, usNj.getSaleOptOut()); Assertions.assertEquals(1, usNj.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0, 1), usNj.getSensitiveDataProcessing()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1), usNj.getKnownChildSensitiveDataConsents()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0, 1), usNj.getSensitiveDataProcessing()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1), usNj.getKnownChildSensitiveDataConsents()); Assertions.assertEquals(1, usNj.getAdditionalDataProcessingConsent()); Assertions.assertEquals(1, usNj.getMspaCoveredTransaction()); Assertions.assertEquals(1, usNj.getMspaOptOutOptionMode()); @@ -152,19 +155,23 @@ public void testDecodeWithGpcSegmentExcluded() throws DecodingException { Assertions.assertEquals(1, usNj.getTargetedAdvertisingOptOutNotice()); Assertions.assertEquals(1, usNj.getSaleOptOut()); Assertions.assertEquals(1, usNj.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0, 1), usNj.getSensitiveDataProcessing()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1), usNj.getKnownChildSensitiveDataConsents()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0, 1), usNj.getSensitiveDataProcessing()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1), usNj.getKnownChildSensitiveDataConsents()); Assertions.assertEquals(1, usNj.getAdditionalDataProcessingConsent()); Assertions.assertEquals(1, usNj.getMspaCoveredTransaction()); Assertions.assertEquals(1, usNj.getMspaOptOutOptionMode()); Assertions.assertEquals(2, usNj.getMspaServiceProviderMode()); Assertions.assertEquals(false, usNj.getGpcSegmentIncluded()); } - + @Test() public void testDecodeGarbage() { - Assertions.assertThrows(DecodingException.class, () -> { - new UsNj("z").getProcessingNotice(); - }); + Assertions.assertThrows( + DecodingException.class, + () -> { + new UsNj("z").getProcessingNotice(); + }); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsOrTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsOrTest.java index 34c310b5..3a78e62c 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsOrTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsOrTest.java @@ -1,12 +1,11 @@ package com.iab.gpp.encoder.section; - -import java.util.Arrays; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.ValidationException; import com.iab.gpp.encoder.field.UsOrField; +import java.util.Arrays; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; public class UsOrTest { @@ -25,7 +24,8 @@ public void testEncode2() { usOr.setFieldValue(UsOrField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, 1); usOr.setFieldValue(UsOrField.SALE_OPT_OUT, 1); usOr.setFieldValue(UsOrField.TARGETED_ADVERTISING_OPT_OUT, 1); - usOr.setFieldValue(UsOrField.SENSITIVE_DATA_PROCESSING, Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0, 1, 2)); + usOr.setFieldValue( + UsOrField.SENSITIVE_DATA_PROCESSING, Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0, 1, 2)); usOr.setFieldValue(UsOrField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, Arrays.asList(2, 1, 0)); usOr.setFieldValue(UsOrField.ADDITIONAL_DATA_PROCESSING_CONSENT, 1); usOr.setFieldValue(UsOrField.MSPA_COVERED_TRANSACTION, 1); @@ -35,7 +35,7 @@ public void testEncode2() { Assertions.assertEquals("BVWSSRpFYA.YA", usOr.encode()); } - + @Test public void testSetInvalidValues() { UsOr usOr = new UsOr(); @@ -44,77 +44,78 @@ public void testSetInvalidValues() { usOr.setFieldValue(UsOrField.PROCESSING_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usOr.setFieldValue(UsOrField.SALE_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usOr.setFieldValue(UsOrField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usOr.setFieldValue(UsOrField.SALE_OPT_OUT, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usOr.setFieldValue(UsOrField.TARGETED_ADVERTISING_OPT_OUT, -1); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { - usOr.setFieldValue(UsOrField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 1, 2, 0, 1)); + usOr.setFieldValue( + UsOrField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 1, 2, 0, 1)); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usOr.setFieldValue(UsOrField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, Arrays.asList(1, 2, 3)); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usOr.setFieldValue(UsOrField.ADDITIONAL_DATA_PROCESSING_CONSENT, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usOr.setFieldValue(UsOrField.MSPA_COVERED_TRANSACTION, 0); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usOr.setFieldValue(UsOrField.MSPA_OPT_OUT_OPTION_MODE, 4); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usOr.setFieldValue(UsOrField.MSPA_SERVICE_PROVIDER_MODE, -1); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } } @@ -134,7 +135,8 @@ public void testDecode1() throws DecodingException { Assertions.assertEquals(1, usOr.getTargetedAdvertisingOptOutNotice()); Assertions.assertEquals(1, usOr.getSaleOptOut()); Assertions.assertEquals(1, usOr.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0, 1, 2), usOr.getSensitiveDataProcessing()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0, 1, 2), usOr.getSensitiveDataProcessing()); Assertions.assertEquals(Arrays.asList(2, 1, 0), usOr.getKnownChildSensitiveDataConsents()); Assertions.assertEquals(1, usOr.getAdditionalDataProcessingConsent()); Assertions.assertEquals(1, usOr.getMspaCoveredTransaction()); @@ -152,7 +154,8 @@ public void testDecodeWithGpcSegmentExcluded() throws DecodingException { Assertions.assertEquals(1, usOr.getTargetedAdvertisingOptOutNotice()); Assertions.assertEquals(1, usOr.getSaleOptOut()); Assertions.assertEquals(1, usOr.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0, 1, 2), usOr.getSensitiveDataProcessing()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0, 1, 2), usOr.getSensitiveDataProcessing()); Assertions.assertEquals(Arrays.asList(2, 1, 0), usOr.getKnownChildSensitiveDataConsents()); Assertions.assertEquals(1, usOr.getAdditionalDataProcessingConsent()); Assertions.assertEquals(1, usOr.getMspaCoveredTransaction()); @@ -160,11 +163,13 @@ public void testDecodeWithGpcSegmentExcluded() throws DecodingException { Assertions.assertEquals(2, usOr.getMspaServiceProviderMode()); Assertions.assertEquals(false, usOr.getGpcSegmentIncluded()); } - + @Test() public void testDecodeGarbage() { - Assertions.assertThrows(DecodingException.class, () -> { - new UsOr("z").getProcessingNotice(); - }); + Assertions.assertThrows( + DecodingException.class, + () -> { + new UsOr("z").getProcessingNotice(); + }); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsTnTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsTnTest.java index 8d0cae7d..79aa5ff1 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsTnTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsTnTest.java @@ -1,12 +1,11 @@ package com.iab.gpp.encoder.section; - -import java.util.Arrays; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.ValidationException; import com.iab.gpp.encoder.field.UsTnField; +import java.util.Arrays; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; public class UsTnTest { @@ -35,7 +34,7 @@ public void testEncode2() { Assertions.assertEquals("BVWSSVWA.YA", usTn.encode()); } - + @Test public void testSetInvalidValues() { UsTn usTn = new UsTn(); @@ -44,77 +43,78 @@ public void testSetInvalidValues() { usTn.setFieldValue(UsTnField.PROCESSING_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usTn.setFieldValue(UsTnField.SALE_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usTn.setFieldValue(UsTnField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usTn.setFieldValue(UsTnField.SALE_OPT_OUT, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usTn.setFieldValue(UsTnField.TARGETED_ADVERTISING_OPT_OUT, -1); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { - usTn.setFieldValue(UsTnField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 1, 2, 0, 1)); + usTn.setFieldValue( + UsTnField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 1, 2, 0, 1)); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usTn.setFieldValue(UsTnField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usTn.setFieldValue(UsTnField.ADDITIONAL_DATA_PROCESSING_CONSENT, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usTn.setFieldValue(UsTnField.MSPA_COVERED_TRANSACTION, 0); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usTn.setFieldValue(UsTnField.MSPA_OPT_OUT_OPTION_MODE, 4); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usTn.setFieldValue(UsTnField.MSPA_SERVICE_PROVIDER_MODE, -1); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } } @@ -134,7 +134,8 @@ public void testDecode1() throws DecodingException { Assertions.assertEquals(1, usTn.getTargetedAdvertisingOptOutNotice()); Assertions.assertEquals(1, usTn.getSaleOptOut()); Assertions.assertEquals(1, usTn.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usTn.getSensitiveDataProcessing()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usTn.getSensitiveDataProcessing()); Assertions.assertEquals(1, usTn.getKnownChildSensitiveDataConsents()); Assertions.assertEquals(1, usTn.getAdditionalDataProcessingConsent()); Assertions.assertEquals(1, usTn.getMspaCoveredTransaction()); @@ -152,7 +153,8 @@ public void testDecodeWithGpcSegmentExcluded() throws DecodingException { Assertions.assertEquals(1, usTn.getTargetedAdvertisingOptOutNotice()); Assertions.assertEquals(1, usTn.getSaleOptOut()); Assertions.assertEquals(1, usTn.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usTn.getSensitiveDataProcessing()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usTn.getSensitiveDataProcessing()); Assertions.assertEquals(1, usTn.getKnownChildSensitiveDataConsents()); Assertions.assertEquals(1, usTn.getAdditionalDataProcessingConsent()); Assertions.assertEquals(1, usTn.getMspaCoveredTransaction()); @@ -160,11 +162,13 @@ public void testDecodeWithGpcSegmentExcluded() throws DecodingException { Assertions.assertEquals(2, usTn.getMspaServiceProviderMode()); Assertions.assertEquals(false, usTn.getGpcSegmentIncluded()); } - + @Test() public void testDecodeGarbage() { - Assertions.assertThrows(DecodingException.class, () -> { - new UsTn("z").getProcessingNotice(); - }); + Assertions.assertThrows( + DecodingException.class, + () -> { + new UsTn("z").getProcessingNotice(); + }); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsTxTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsTxTest.java index 4609feed..28a4ef45 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsTxTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsTxTest.java @@ -1,12 +1,11 @@ package com.iab.gpp.encoder.section; - -import java.util.Arrays; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.ValidationException; import com.iab.gpp.encoder.field.UsTxField; +import java.util.Arrays; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; public class UsTxTest { @@ -35,7 +34,7 @@ public void testEncode2() { Assertions.assertEquals("BVWSSVWA.YA", usTx.encode()); } - + @Test public void testSetInvalidValues() { UsTx usTx = new UsTx(); @@ -44,77 +43,78 @@ public void testSetInvalidValues() { usTx.setFieldValue(UsTxField.PROCESSING_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usTx.setFieldValue(UsTxField.SALE_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usTx.setFieldValue(UsTxField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usTx.setFieldValue(UsTxField.SALE_OPT_OUT, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usTx.setFieldValue(UsTxField.TARGETED_ADVERTISING_OPT_OUT, -1); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { - usTx.setFieldValue(UsTxField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 1, 2, 0, 1)); + usTx.setFieldValue( + UsTxField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 1, 2, 0, 1)); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usTx.setFieldValue(UsTxField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usTx.setFieldValue(UsTxField.ADDITIONAL_DATA_PROCESSING_CONSENT, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usTx.setFieldValue(UsTxField.MSPA_COVERED_TRANSACTION, 0); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usTx.setFieldValue(UsTxField.MSPA_OPT_OUT_OPTION_MODE, 4); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usTx.setFieldValue(UsTxField.MSPA_SERVICE_PROVIDER_MODE, -1); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } } @@ -134,7 +134,8 @@ public void testDecode1() throws DecodingException { Assertions.assertEquals(1, usTx.getTargetedAdvertisingOptOutNotice()); Assertions.assertEquals(1, usTx.getSaleOptOut()); Assertions.assertEquals(1, usTx.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usTx.getSensitiveDataProcessing()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usTx.getSensitiveDataProcessing()); Assertions.assertEquals(1, usTx.getKnownChildSensitiveDataConsents()); Assertions.assertEquals(1, usTx.getAdditionalDataProcessingConsent()); Assertions.assertEquals(1, usTx.getMspaCoveredTransaction()); @@ -152,7 +153,8 @@ public void testDecodeWithGpcSegmentExcluded() throws DecodingException { Assertions.assertEquals(1, usTx.getTargetedAdvertisingOptOutNotice()); Assertions.assertEquals(1, usTx.getSaleOptOut()); Assertions.assertEquals(1, usTx.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usTx.getSensitiveDataProcessing()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usTx.getSensitiveDataProcessing()); Assertions.assertEquals(1, usTx.getKnownChildSensitiveDataConsents()); Assertions.assertEquals(1, usTx.getAdditionalDataProcessingConsent()); Assertions.assertEquals(1, usTx.getMspaCoveredTransaction()); @@ -160,11 +162,13 @@ public void testDecodeWithGpcSegmentExcluded() throws DecodingException { Assertions.assertEquals(2, usTx.getMspaServiceProviderMode()); Assertions.assertEquals(false, usTx.getGpcSegmentIncluded()); } - + @Test() public void testDecodeGarbage() { - Assertions.assertThrows(DecodingException.class, () -> { - new UsTx("z").getProcessingNotice(); - }); + Assertions.assertThrows( + DecodingException.class, + () -> { + new UsTx("z").getProcessingNotice(); + }); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsUtTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsUtTest.java index f95b88f0..3ad6dc06 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsUtTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsUtTest.java @@ -1,12 +1,11 @@ package com.iab.gpp.encoder.section; - -import java.util.Arrays; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.ValidationException; import com.iab.gpp.encoder.field.UsUtField; +import java.util.Arrays; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; public class UsUtTest { @@ -34,7 +33,7 @@ public void testEncode2() { Assertions.assertEquals("BVVkklWA", usUt.encode()); } - + @Test public void testSetInvalidValues() { UsUt usUt = new UsUt(); @@ -43,79 +42,79 @@ public void testSetInvalidValues() { usUt.setFieldValue(UsUtField.SHARING_NOTICE, -1); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usUt.setFieldValue(UsUtField.SALE_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usUt.setFieldValue(UsUtField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usUt.setFieldValue(UsUtField.SALE_OPT_OUT, 4); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usUt.setFieldValue(UsUtField.SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usUt.setFieldValue(UsUtField.TARGETED_ADVERTISING_OPT_OUT, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { - usUt.setFieldValue(UsUtField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 0, 1, 2, 0)); + usUt.setFieldValue( + UsUtField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 0, 1, 2, 0)); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usUt.setFieldValue(UsUtField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usUt.setFieldValue(UsUtField.MSPA_COVERED_TRANSACTION, 0); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usUt.setFieldValue(UsUtField.MSPA_OPT_OUT_OPTION_MODE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usUt.setFieldValue(UsUtField.MSPA_SERVICE_PROVIDER_MODE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - } @Test @@ -127,17 +126,20 @@ public void testDecode1() throws DecodingException { Assertions.assertEquals(1, usUt.getTargetedAdvertisingOptOutNotice()); Assertions.assertEquals(1, usUt.getSaleOptOut()); Assertions.assertEquals(1, usUt.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usUt.getSensitiveDataProcessing()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usUt.getSensitiveDataProcessing()); Assertions.assertEquals(1, usUt.getKnownChildSensitiveDataConsents()); Assertions.assertEquals(1, usUt.getMspaCoveredTransaction()); Assertions.assertEquals(1, usUt.getMspaOptOutOptionMode()); Assertions.assertEquals(2, usUt.getMspaServiceProviderMode()); } - + @Test() public void testDecodeGarbage() { - Assertions.assertThrows(DecodingException.class, () -> { - new UsUt("z").getKnownChildSensitiveDataConsents(); - }); + Assertions.assertThrows( + DecodingException.class, + () -> { + new UsUt("z").getKnownChildSensitiveDataConsents(); + }); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsVaTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsVaTest.java index 346e0ca6..06025a47 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsVaTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsVaTest.java @@ -1,14 +1,13 @@ package com.iab.gpp.encoder.section; - -import java.util.Arrays; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.error.InvalidFieldException; import com.iab.gpp.encoder.error.ValidationException; import com.iab.gpp.encoder.field.UsVaField; +import java.util.Arrays; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; public class UsVaTest { @@ -28,7 +27,8 @@ public void testEncode2() { usVa.setFieldValue(UsVaField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, 1); usVa.setFieldValue(UsVaField.SALE_OPT_OUT, 1); usVa.setFieldValue(UsVaField.TARGETED_ADVERTISING_OPT_OUT, 1); - usVa.setFieldValue(UsVaField.SENSITIVE_DATA_PROCESSING, Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1)); + usVa.setFieldValue( + UsVaField.SENSITIVE_DATA_PROCESSING, Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1)); usVa.setFieldValue(UsVaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, 1); usVa.setFieldValue(UsVaField.MSPA_COVERED_TRANSACTION, 1); usVa.setFieldValue(UsVaField.MSPA_OPT_OUT_OPTION_MODE, 1); @@ -80,7 +80,8 @@ public void testSetInvalidValues() { } try { - usVa.setFieldValue(UsVaField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 1, 2, 0, 1)); + usVa.setFieldValue( + UsVaField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 1, 2, 0, 1)); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { @@ -113,7 +114,6 @@ public void testSetInvalidValues() { } catch (ValidationException e) { } - } @Test @@ -125,7 +125,8 @@ public void testDecode1() throws DecodingException { Assertions.assertEquals(1, usVa.getTargetedAdvertisingOptOutNotice()); Assertions.assertEquals(1, usVa.getSaleOptOut()); Assertions.assertEquals(1, usVa.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usVa.getSensitiveDataProcessing()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usVa.getSensitiveDataProcessing()); Assertions.assertEquals(1, usVa.getKnownChildSensitiveDataConsents()); Assertions.assertEquals(1, usVa.getMspaCoveredTransaction()); Assertions.assertEquals(1, usVa.getMspaOptOutOptionMode()); @@ -134,8 +135,10 @@ public void testDecode1() throws DecodingException { @Test() public void testDecodeGarbage() { - Assertions.assertThrows(DecodingException.class, () -> { - new UsVa("z").getMspaCoveredTransaction(); - }); + Assertions.assertThrows( + DecodingException.class, + () -> { + new UsVa("z").getMspaCoveredTransaction(); + }); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UspV1Test.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UspV1Test.java index 126b9b57..9c810f08 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UspV1Test.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UspV1Test.java @@ -1,10 +1,10 @@ package com.iab.gpp.encoder.section; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.InvalidFieldException; import com.iab.gpp.encoder.field.UspV1Field; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; public class UspV1Test { @@ -62,5 +62,4 @@ public void testDecode2() throws DecodingException, InvalidFieldException { Assertions.assertEquals(uspv1.getFieldValue(UspV1Field.OPT_OUT_SALE), uspv1.getOptOutSale()); Assertions.assertEquals(uspv1.getFieldValue(UspV1Field.LSPA_COVERED), uspv1.getLspaCovered()); } - } diff --git a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/Loader.java b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/Loader.java index 158ced93..024b07f4 100644 --- a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/Loader.java +++ b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/Loader.java @@ -20,8 +20,6 @@ * #L% */ -import java.io.IOException; -import java.io.InputStream; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.module.SimpleAbstractTypeResolver; @@ -40,6 +38,8 @@ import com.iab.gpp.extras.jackson.gvl.Stack; import com.iab.gpp.extras.jackson.gvl.Vendor; import com.iab.gpp.extras.jackson.gvl.VendorUrl; +import java.io.IOException; +import java.io.InputStream; public class Loader { private ObjectMapper objectMapper = new ObjectMapper(); diff --git a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/cmp/Cmp.java b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/cmp/Cmp.java index eefc3bd3..963795b4 100644 --- a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/cmp/Cmp.java +++ b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/cmp/Cmp.java @@ -21,7 +21,6 @@ */ import com.fasterxml.jackson.annotation.JsonProperty; - import java.time.Instant; import java.util.Optional; @@ -35,7 +34,6 @@ public class Cmp implements com.iab.gpp.extras.cmp.Cmp { private Instant deletedDate; - /** * A CMP id: a numeric ID which is incrementally assigned and never re-used – inactive CMPs are * marked as deleted @@ -84,6 +82,8 @@ public Optional getDeletedDate() { */ @Override public boolean isDeleted() { - return Optional.ofNullable(this.deletedDate).map(deleteDate -> !deleteDate.isAfter(Instant.now())).orElse(false); + return Optional.ofNullable(this.deletedDate) + .map(deleteDate -> !deleteDate.isAfter(Instant.now())) + .orElse(false); } } diff --git a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/DataCategory.java b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/DataCategory.java index 375c5aea..d207ed2b 100644 --- a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/DataCategory.java +++ b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/DataCategory.java @@ -58,6 +58,4 @@ public String getName() { public String getDescription() { return description; } - - } diff --git a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/Gvl.java b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/Gvl.java index 2cbcdcc8..917a4fa2 100644 --- a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/Gvl.java +++ b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/Gvl.java @@ -20,12 +20,6 @@ * #L% */ - -import java.time.Instant; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Optional; import com.iab.gpp.extras.gvl.DataCategory; import com.iab.gpp.extras.gvl.Feature; import com.iab.gpp.extras.gvl.Purpose; @@ -33,6 +27,11 @@ import com.iab.gpp.extras.gvl.SpecialPurpose; import com.iab.gpp.extras.gvl.Stack; import com.iab.gpp.extras.gvl.Vendor; +import java.time.Instant; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Optional; public class Gvl implements com.iab.gpp.extras.gvl.Gvl { @@ -69,13 +68,13 @@ public int getVendorListVersion() { } /** - * A TCF Policy Version. The TCF MO will increment this value whenever a GVL change (such as adding - * a new Purpose or Feature or a change in Purpose wording) legally invalidates existing TC Strings - * and requires CMPs to re-establish transparency and consent from users. TCF Policy changes should - * be relatively infrequent and only occur when necessary to support changes in global mandate. If - * the policy version number in the latest GVL is different from the value in your TC String, then - * you need to re-establish transparency and consent for that user. A version 1 format TC String is - * considered to have a version value of 1. + * A TCF Policy Version. The TCF MO will increment this value whenever a GVL change (such as + * adding a new Purpose or Feature or a change in Purpose wording) legally invalidates existing TC + * Strings and requires CMPs to re-establish transparency and consent from users. TCF Policy + * changes should be relatively infrequent and only occur when necessary to support changes in + * global mandate. If the policy version number in the latest GVL is different from the value in + * your TC String, then you need to re-establish transparency and consent for that user. A version + * 1 format TC String is considered to have a version value of 1. * * @return tcf policy version */ diff --git a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/Overflow.java b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/Overflow.java index d837da26..35e5aa4b 100644 --- a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/Overflow.java +++ b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/Overflow.java @@ -20,7 +20,6 @@ * #L% */ - public class Overflow implements com.iab.gpp.extras.gvl.Overflow { private int httpGetLimit; diff --git a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/Purpose.java b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/Purpose.java index 12919c57..5504f6af 100644 --- a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/Purpose.java +++ b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/Purpose.java @@ -23,9 +23,7 @@ * #L% */ -/** - * A standard purpose - */ +/** A standard purpose */ public class Purpose implements com.iab.gpp.extras.gvl.Purpose { private int id; @@ -87,8 +85,8 @@ public Optional> getIllustrations() { } /** - * An optional flag where false means CMPs should never afford users the means to provide an opt-in - * consent choice + * An optional flag where false means CMPs should never afford users the means to provide an + * opt-in consent choice * * @return consentable boolean */ diff --git a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/SpecialFeature.java b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/SpecialFeature.java index f3e88141..0b70ffb6 100644 --- a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/SpecialFeature.java +++ b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/SpecialFeature.java @@ -25,6 +25,4 @@ * signal an opt-in choice as to whether vendors may employ the feature when performing any purpose * processing. See Policies for specifics. */ -public class SpecialFeature extends Feature implements com.iab.gpp.extras.gvl.SpecialFeature { - -} +public class SpecialFeature extends Feature implements com.iab.gpp.extras.gvl.SpecialFeature {} diff --git a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/SpecialPurpose.java b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/SpecialPurpose.java index f42f0617..09c7efba 100644 --- a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/SpecialPurpose.java +++ b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/SpecialPurpose.java @@ -20,9 +20,5 @@ * #L% */ -/** - * A special purpose declared as performed on the legal basis of a legitimate interest - */ -public class SpecialPurpose extends Purpose implements com.iab.gpp.extras.gvl.SpecialPurpose { - -} +/** A special purpose declared as performed on the legal basis of a legitimate interest */ +public class SpecialPurpose extends Purpose implements com.iab.gpp.extras.gvl.SpecialPurpose {} diff --git a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/Vendor.java b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/Vendor.java index de55cfee..30634ec1 100644 --- a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/Vendor.java +++ b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/Vendor.java @@ -20,12 +20,12 @@ * #L% */ -import java.time.Instant; -import java.util.List; -import java.util.Optional; import com.iab.gpp.extras.gvl.DataRetention; import com.iab.gpp.extras.gvl.Overflow; import com.iab.gpp.extras.gvl.VendorUrl; +import java.time.Instant; +import java.util.List; +import java.util.Optional; public class Vendor implements com.iab.gpp.extras.gvl.Vendor { @@ -51,8 +51,8 @@ public class Vendor implements com.iab.gpp.extras.gvl.Vendor { private List dataDeclaration; /** - * A vendor id: a numeric ID which is incrementally assigned and never re-used – deleted Vendors are - * just marked as deleted + * A vendor id: a numeric ID which is incrementally assigned and never re-used – deleted Vendors + * are just marked as deleted * * @return vendor id */ @@ -82,8 +82,8 @@ public List getPurposes() { } /** - * List of Purposes for which the vendor requires to be transparently disclosed as their legitimate - * interest + * List of Purposes for which the vendor requires to be transparently disclosed as their + * legitimate interest * * @return A {@link List} of purpose ids disclosed as legitimate interests */ @@ -104,8 +104,8 @@ public Optional> getImpConsPurposes() { /** * List of purposes where the vendor is flexible regarding the legal basis; they will perform the - * processing based on consent or a legitimate interest. The 'default' is determined by which of the - * other two mutually-exclusive purpose fields is used to declare the purpose for the vendor + * processing based on consent or a legitimate interest. The 'default' is determined by which of + * the other two mutually-exclusive purpose fields is used to declare the purpose for the vendor * * @return A {@link List} of flexible purpose ids */ @@ -167,7 +167,8 @@ public Optional getDeletedDate() { /** * object specifying the vendor's http GET request length limit. It is optional. If a vendor entry - * does not include this attribute then the vendor has no overflow options and none can be inferred. + * does not include this attribute then the vendor has no overflow options and none can be + * inferred. * * @return A {@link com.iab.gpp.extras.gvl.Overflow} object */ @@ -183,14 +184,17 @@ public Optional getOverflow() { */ @Override public boolean isDeleted() { - return Optional.ofNullable(this.deletedDate).map(deletedDate -> !deletedDate.isAfter(Instant.now())).orElse(false); + return Optional.ofNullable(this.deletedDate) + .map(deletedDate -> !deletedDate.isAfter(Instant.now())) + .orElse(false); } /** - * The number of seconds representing the longest potential duration for cookie storage on a device. + * The number of seconds representing the longest potential duration for cookie storage on a + * device. * - * @return The number, in seconds, of the longest potential duration for storage on a device, as set - * when using the cookie method of storage. + * @return The number, in seconds, of the longest potential duration for storage on a device, as + * set when using the cookie method of storage. */ @Override public Optional getCookieMaxAgeSeconds() { @@ -242,7 +246,7 @@ public Optional getDeviceStorageDisclosureUrl() { /** * dataRetention - * + * * @return dataRetention */ public Optional getDataRetention() { @@ -251,7 +255,7 @@ public Optional getDataRetention() { /** * urls - * + * * @return urls */ public Optional> getUrls() { @@ -260,7 +264,7 @@ public Optional> getUrls() { /** * dataDeclarations - * + * * @return dataDeclarations */ public Optional> getDataDeclaration() { diff --git a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/VendorUrl.java b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/VendorUrl.java index cf4d3b86..c42a3266 100644 --- a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/VendorUrl.java +++ b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/VendorUrl.java @@ -60,5 +60,4 @@ public String getPrivacy() { public Optional getLegIntClaim() { return Optional.ofNullable(legIntClaim); } - } diff --git a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/cmp/CmpListTest.java b/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/cmp/CmpListTest.java index 673ad24f..c23cbb84 100644 --- a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/cmp/CmpListTest.java +++ b/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/cmp/CmpListTest.java @@ -1,11 +1,13 @@ package com.iab.gpp.extras.jackson.cmp; +import com.iab.gpp.extras.cmp.Cmp; +import com.iab.gpp.extras.cmp.CmpList; +import com.iab.gpp.extras.jackson.Loader; import java.io.IOException; import java.time.Instant; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; -import com.iab.gpp.extras.cmp.Cmp; /*- * #%L @@ -27,9 +29,6 @@ * #L% */ -import com.iab.gpp.extras.cmp.CmpList; -import com.iab.gpp.extras.jackson.Loader; - public class CmpListTest { private static CmpList cmpList; @@ -38,9 +37,12 @@ public class CmpListTest { @BeforeAll public static void setUpBeforeClass() throws IOException { - cmpList = new Loader().cmpList(CmpListTest.class.getClassLoader().getResourceAsStream("cmpList.json")); + cmpList = + new Loader() + .cmpList(CmpListTest.class.getClassLoader().getResourceAsStream("cmpList.json")); cmpThree = cmpList.getCmps().stream().filter(o -> o.getId() == 3).findFirst().orElse(null); - cmpTwentyThree = cmpList.getCmps().stream().filter(o -> o.getId() == 23).findFirst().orElse(null); + cmpTwentyThree = + cmpList.getCmps().stream().filter(o -> o.getId() == 23).findFirst().orElse(null); } @Test diff --git a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/GvlCanadaTest.java b/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/GvlCanadaTest.java index 8f665014..27b024ca 100644 --- a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/GvlCanadaTest.java +++ b/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/GvlCanadaTest.java @@ -2,103 +2,118 @@ import com.iab.gpp.extras.gvl.Gvl; import com.iab.gpp.extras.jackson.Loader; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - import java.io.IOException; import java.util.Arrays; import java.util.Collections; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; public class GvlCanadaTest { - @Test - public void test() throws IOException { - Gvl gvl = new Loader() - .globalVendorList(GvlV2Test.class.getClassLoader().getResourceAsStream("vendorlist/v2/ca/vendor-list.json")); - Assertions.assertFalse(gvl.getDataCategories().isPresent()); - Assertions.assertEquals(3, gvl.getFeatures().size()); - Assertions.assertEquals(2, gvl.getGvlSpecificationVersion()); - Assertions.assertNotNull(gvl.getLastUpdated()); - Assertions.assertEquals(10, gvl.getPurposes().size()); - Assertions.assertEquals(2, gvl.getSpecialFeatures().size()); - Assertions.assertEquals(2, gvl.getSpecialPurposes().size()); - Assertions.assertEquals(42, gvl.getStacks().size()); - Assertions.assertEquals(2, gvl.getTcfPolicyVersion()); - Assertions.assertEquals(45, gvl.getVendorListVersion()); - Assertions.assertEquals(36, gvl.getVendors().size()); + @Test + public void test() throws IOException { + Gvl gvl = + new Loader() + .globalVendorList( + GvlV2Test.class + .getClassLoader() + .getResourceAsStream("vendorlist/v2/ca/vendor-list.json")); + Assertions.assertFalse(gvl.getDataCategories().isPresent()); + Assertions.assertEquals(3, gvl.getFeatures().size()); + Assertions.assertEquals(2, gvl.getGvlSpecificationVersion()); + Assertions.assertNotNull(gvl.getLastUpdated()); + Assertions.assertEquals(10, gvl.getPurposes().size()); + Assertions.assertEquals(2, gvl.getSpecialFeatures().size()); + Assertions.assertEquals(2, gvl.getSpecialPurposes().size()); + Assertions.assertEquals(42, gvl.getStacks().size()); + Assertions.assertEquals(2, gvl.getTcfPolicyVersion()); + Assertions.assertEquals(45, gvl.getVendorListVersion()); + Assertions.assertEquals(36, gvl.getVendors().size()); - Assertions.assertEquals(1, gvl.getPurposes().get(0).getId()); - Assertions.assertEquals("Store and/or access information on a device", gvl.getPurposes().get(0).getName()); - Assertions.assertEquals( - "Cookies, device identifiers, or other information can be stored or accessed on your device for the purposes presented to you.", - gvl.getPurposes().get(0).getDescription()); - Assertions.assertTrue(gvl.getPurposes().get(0).getDescriptionLegal().isPresent()); - Assertions.assertEquals( - "Vendors can:\n* Store and access information on the device such as cookies and device identifiers presented to a user.", - gvl.getPurposes().get(0).getDescriptionLegal().get()); - Assertions.assertFalse(gvl.getPurposes().get(0).getIllustrations().isPresent()); + Assertions.assertEquals(1, gvl.getPurposes().get(0).getId()); + Assertions.assertEquals( + "Store and/or access information on a device", gvl.getPurposes().get(0).getName()); + Assertions.assertEquals( + "Cookies, device identifiers, or other information can be stored or accessed on your device for the purposes presented to you.", + gvl.getPurposes().get(0).getDescription()); + Assertions.assertTrue(gvl.getPurposes().get(0).getDescriptionLegal().isPresent()); + Assertions.assertEquals( + "Vendors can:\n* Store and access information on the device such as cookies and device identifiers presented to a user.", + gvl.getPurposes().get(0).getDescriptionLegal().get()); + Assertions.assertFalse(gvl.getPurposes().get(0).getIllustrations().isPresent()); - Assertions.assertEquals(1, gvl.getSpecialPurposes().get(0).getId()); - Assertions.assertEquals("Ensure security, prevent fraud, and debug", gvl.getSpecialPurposes().get(0).getName()); - Assertions.assertEquals( - "Your data can be used to monitor for and prevent fraudulent activity, and ensure systems and processes work properly and securely.", - gvl.getSpecialPurposes().get(0).getDescription()); - Assertions.assertTrue(gvl.getSpecialPurposes().get(0).getDescriptionLegal().isPresent()); - Assertions.assertEquals( - "To ensure security, prevent fraud and debug vendors can:\n* Ensure data are securely transmitted\n* Detect and prevent malicious, fraudulent, invalid, or illegal activity.\n* Ensure correct and efficient operation of systems and processes, including to monitor and enhance the performance of systems and processes engaged in permitted purposes\nVendors cannot:\n* Conduct any other data processing operation allowed under a different purpose under this purpose.\nNote: Data collected and used to ensure security, prevent fraud, and debug may include automatically-sent device characteristics for identification, precise geolocation data, and data obtained by actively scanning device characteristics for identification without separate disclosure and/or opt-in.", - gvl.getSpecialPurposes().get(0).getDescriptionLegal().get()); - Assertions.assertFalse(gvl.getSpecialPurposes().get(0).getIllustrations().isPresent()); + Assertions.assertEquals(1, gvl.getSpecialPurposes().get(0).getId()); + Assertions.assertEquals( + "Ensure security, prevent fraud, and debug", gvl.getSpecialPurposes().get(0).getName()); + Assertions.assertEquals( + "Your data can be used to monitor for and prevent fraudulent activity, and ensure systems and processes work properly and securely.", + gvl.getSpecialPurposes().get(0).getDescription()); + Assertions.assertTrue(gvl.getSpecialPurposes().get(0).getDescriptionLegal().isPresent()); + Assertions.assertEquals( + "To ensure security, prevent fraud and debug vendors can:\n* Ensure data are securely transmitted\n* Detect and prevent malicious, fraudulent, invalid, or illegal activity.\n* Ensure correct and efficient operation of systems and processes, including to monitor and enhance the performance of systems and processes engaged in permitted purposes\nVendors cannot:\n* Conduct any other data processing operation allowed under a different purpose under this purpose.\nNote: Data collected and used to ensure security, prevent fraud, and debug may include automatically-sent device characteristics for identification, precise geolocation data, and data obtained by actively scanning device characteristics for identification without separate disclosure and/or opt-in.", + gvl.getSpecialPurposes().get(0).getDescriptionLegal().get()); + Assertions.assertFalse(gvl.getSpecialPurposes().get(0).getIllustrations().isPresent()); - Assertions.assertEquals(1, gvl.getFeatures().get(0).getId()); - Assertions.assertEquals("Match and combine offline data sources", gvl.getFeatures().get(0).getName()); - Assertions.assertEquals( - "Data from offline data sources can be combined with your online activity in support of one or more purposes", - gvl.getFeatures().get(0).getDescription()); - Assertions.assertTrue(gvl.getFeatures().get(0).getDescriptionLegal().isPresent()); - Assertions.assertEquals( - "Vendors can:\n* Combine data obtained offline with data collected online in support of one or more Purposes or Special Purposes.", - gvl.getFeatures().get(0).getDescriptionLegal().get()); - Assertions.assertFalse(gvl.getFeatures().get(0).getIllustrations().isPresent()); + Assertions.assertEquals(1, gvl.getFeatures().get(0).getId()); + Assertions.assertEquals( + "Match and combine offline data sources", gvl.getFeatures().get(0).getName()); + Assertions.assertEquals( + "Data from offline data sources can be combined with your online activity in support of one or more purposes", + gvl.getFeatures().get(0).getDescription()); + Assertions.assertTrue(gvl.getFeatures().get(0).getDescriptionLegal().isPresent()); + Assertions.assertEquals( + "Vendors can:\n* Combine data obtained offline with data collected online in support of one or more Purposes or Special Purposes.", + gvl.getFeatures().get(0).getDescriptionLegal().get()); + Assertions.assertFalse(gvl.getFeatures().get(0).getIllustrations().isPresent()); - Assertions.assertEquals(1, gvl.getSpecialFeatures().get(0).getId()); - Assertions.assertEquals("Use precise geolocation data", gvl.getSpecialFeatures().get(0).getName()); - Assertions.assertEquals( - "Your precise geolocation data can be used in support of one or more purposes. This means your location can be accurate to within several meters.", - gvl.getSpecialFeatures().get(0).getDescription()); - Assertions.assertTrue(gvl.getSpecialFeatures().get(0).getDescriptionLegal().isPresent()); - Assertions.assertEquals( - "Vendors can:\n* Collect and process precise geolocation data in support of one or more purposes.\nN.B. Precise geolocation means that there are no restrictions on the precision of a user’s location; this can be accurate to within several meters.", - gvl.getSpecialFeatures().get(0).getDescriptionLegal().get()); - Assertions.assertFalse(gvl.getSpecialFeatures().get(0).getIllustrations().isPresent()); + Assertions.assertEquals(1, gvl.getSpecialFeatures().get(0).getId()); + Assertions.assertEquals( + "Use precise geolocation data", gvl.getSpecialFeatures().get(0).getName()); + Assertions.assertEquals( + "Your precise geolocation data can be used in support of one or more purposes. This means your location can be accurate to within several meters.", + gvl.getSpecialFeatures().get(0).getDescription()); + Assertions.assertTrue(gvl.getSpecialFeatures().get(0).getDescriptionLegal().isPresent()); + Assertions.assertEquals( + "Vendors can:\n* Collect and process precise geolocation data in support of one or more purposes.\nN.B. Precise geolocation means that there are no restrictions on the precision of a user’s location; this can be accurate to within several meters.", + gvl.getSpecialFeatures().get(0).getDescriptionLegal().get()); + Assertions.assertFalse(gvl.getSpecialFeatures().get(0).getIllustrations().isPresent()); - Assertions.assertEquals(1, gvl.getStacks().get(0).getId()); - Assertions.assertEquals("Precise geolocation data, and identification through device scanning", gvl.getStacks().get(0).getName()); - Assertions.assertEquals("Precise geolocation and information about device characteristics can be used.", gvl.getStacks().get(0).getDescription()); - Assertions.assertTrue(gvl.getStacks().get(0).getPurposes().isEmpty()); - Assertions.assertEquals(Arrays.asList(1, 2), gvl.getStacks().get(0).getSpecialFeatures()); + Assertions.assertEquals(1, gvl.getStacks().get(0).getId()); + Assertions.assertEquals( + "Precise geolocation data, and identification through device scanning", + gvl.getStacks().get(0).getName()); + Assertions.assertEquals( + "Precise geolocation and information about device characteristics can be used.", + gvl.getStacks().get(0).getDescription()); + Assertions.assertTrue(gvl.getStacks().get(0).getPurposes().isEmpty()); + Assertions.assertEquals(Arrays.asList(1, 2), gvl.getStacks().get(0).getSpecialFeatures()); - Assertions.assertEquals(2, gvl.getStacks().get(1).getId()); - Assertions.assertEquals("Basic ads, and ad measurement", gvl.getStacks().get(1).getName()); - Assertions.assertEquals("Basic ads can be served. Ad performance can be measured.", gvl.getStacks().get(1).getDescription()); - Assertions.assertEquals(Arrays.asList(2, 7), gvl.getStacks().get(1).getPurposes()); - Assertions.assertTrue(gvl.getStacks().get(1).getSpecialFeatures().isEmpty()); + Assertions.assertEquals(2, gvl.getStacks().get(1).getId()); + Assertions.assertEquals("Basic ads, and ad measurement", gvl.getStacks().get(1).getName()); + Assertions.assertEquals( + "Basic ads can be served. Ad performance can be measured.", + gvl.getStacks().get(1).getDescription()); + Assertions.assertEquals(Arrays.asList(2, 7), gvl.getStacks().get(1).getPurposes()); + Assertions.assertTrue(gvl.getStacks().get(1).getSpecialFeatures().isEmpty()); - Assertions.assertEquals(10, gvl.getVendors().get(0).getId()); - Assertions.assertFalse(gvl.getVendors().get(0).getDeletedDate().isPresent()); - Assertions.assertEquals("Index Exchange Inc. ", gvl.getVendors().get(0).getName()); - Assertions.assertEquals(Arrays.asList(2, 7), gvl.getVendors().get(0).getPurposes()); - Assertions.assertFalse(gvl.getVendors().get(0).getLegIntPurposes().isPresent()); - Assertions.assertTrue(gvl.getVendors().get(0).getImpConsPurposes().isPresent()); - Assertions.assertEquals(Collections.emptyList(), gvl.getVendors().get(0).getImpConsPurposes().get()); - Assertions.assertEquals(Arrays.asList(2, 7), gvl.getVendors().get(0).getFlexiblePurposes()); - Assertions.assertEquals(Arrays.asList(1, 2), gvl.getVendors().get(0).getSpecialPurposes()); - Assertions.assertEquals(Collections.singletonList(3), gvl.getVendors().get(0).getFeatures()); - Assertions.assertEquals(Collections.singletonList(1), gvl.getVendors().get(0).getSpecialFeatures()); - Assertions.assertTrue(gvl.getVendors().get(0).getUrls().isPresent()); - Assertions.assertEquals("https://www.indexexchange.com/privacy/", - gvl.getVendors().get(0).getUrls().get().get(0).getPrivacy()); - Assertions.assertEquals("en", - gvl.getVendors().get(0).getUrls().get().get(0).getLangId()); - Assertions.assertEquals(52, gvl.getVendors().get(1).getId()); - Assertions.assertFalse(gvl.getVendors().get(1).getDeletedDate().isPresent()); - } + Assertions.assertEquals(10, gvl.getVendors().get(0).getId()); + Assertions.assertFalse(gvl.getVendors().get(0).getDeletedDate().isPresent()); + Assertions.assertEquals("Index Exchange Inc. ", gvl.getVendors().get(0).getName()); + Assertions.assertEquals(Arrays.asList(2, 7), gvl.getVendors().get(0).getPurposes()); + Assertions.assertFalse(gvl.getVendors().get(0).getLegIntPurposes().isPresent()); + Assertions.assertTrue(gvl.getVendors().get(0).getImpConsPurposes().isPresent()); + Assertions.assertEquals( + Collections.emptyList(), gvl.getVendors().get(0).getImpConsPurposes().get()); + Assertions.assertEquals(Arrays.asList(2, 7), gvl.getVendors().get(0).getFlexiblePurposes()); + Assertions.assertEquals(Arrays.asList(1, 2), gvl.getVendors().get(0).getSpecialPurposes()); + Assertions.assertEquals(Collections.singletonList(3), gvl.getVendors().get(0).getFeatures()); + Assertions.assertEquals( + Collections.singletonList(1), gvl.getVendors().get(0).getSpecialFeatures()); + Assertions.assertTrue(gvl.getVendors().get(0).getUrls().isPresent()); + Assertions.assertEquals( + "https://www.indexexchange.com/privacy/", + gvl.getVendors().get(0).getUrls().get().get(0).getPrivacy()); + Assertions.assertEquals("en", gvl.getVendors().get(0).getUrls().get().get(0).getLangId()); + Assertions.assertEquals(52, gvl.getVendors().get(1).getId()); + Assertions.assertFalse(gvl.getVendors().get(1).getDeletedDate().isPresent()); + } } diff --git a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/GvlV2Test.java b/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/GvlV2Test.java index 04ba44c9..f79f5731 100644 --- a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/GvlV2Test.java +++ b/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/GvlV2Test.java @@ -20,20 +20,23 @@ * #L% */ +import com.iab.gpp.extras.gvl.Gvl; +import com.iab.gpp.extras.jackson.Loader; import java.io.IOException; import java.util.Arrays; -import java.util.List; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import com.iab.gpp.extras.gvl.Gvl; -import com.iab.gpp.extras.jackson.Loader; public class GvlV2Test { @Test public void test() throws IOException { - Gvl gvl = new Loader() - .globalVendorList(GvlV2Test.class.getClassLoader().getResourceAsStream("vendorlist/v2/vendor-list.json")); + Gvl gvl = + new Loader() + .globalVendorList( + GvlV2Test.class + .getClassLoader() + .getResourceAsStream("vendorlist/v2/vendor-list.json")); Assertions.assertFalse(gvl.getDataCategories().isPresent()); Assertions.assertEquals(3, gvl.getFeatures().size()); Assertions.assertEquals(2, gvl.getGvlSpecificationVersion()); @@ -47,7 +50,8 @@ public void test() throws IOException { Assertions.assertEquals(496, gvl.getVendors().size()); Assertions.assertEquals(1, gvl.getPurposes().get(0).getId()); - Assertions.assertEquals("Store and/or access information on a device", gvl.getPurposes().get(0).getName()); + Assertions.assertEquals( + "Store and/or access information on a device", gvl.getPurposes().get(0).getName()); Assertions.assertEquals( "Cookies, device identifiers, or other information can be stored or accessed on your device for the purposes presented to you.", gvl.getPurposes().get(0).getDescription()); @@ -58,7 +62,8 @@ public void test() throws IOException { Assertions.assertFalse(gvl.getPurposes().get(0).getIllustrations().isPresent()); Assertions.assertEquals(1, gvl.getSpecialPurposes().get(0).getId()); - Assertions.assertEquals("Ensure security, prevent fraud, and debug", gvl.getSpecialPurposes().get(0).getName()); + Assertions.assertEquals( + "Ensure security, prevent fraud, and debug", gvl.getSpecialPurposes().get(0).getName()); Assertions.assertEquals( "Your data can be used to monitor for and prevent fraudulent activity, and ensure systems and processes work properly and securely.", gvl.getSpecialPurposes().get(0).getDescription()); @@ -69,7 +74,8 @@ public void test() throws IOException { Assertions.assertFalse(gvl.getSpecialPurposes().get(0).getIllustrations().isPresent()); Assertions.assertEquals(1, gvl.getFeatures().get(0).getId()); - Assertions.assertEquals("Match and combine offline data sources", gvl.getFeatures().get(0).getName()); + Assertions.assertEquals( + "Match and combine offline data sources", gvl.getFeatures().get(0).getName()); Assertions.assertEquals( "Data from offline data sources can be combined with your online activity in support of one or more purposes", gvl.getFeatures().get(0).getDescription()); @@ -80,7 +86,8 @@ public void test() throws IOException { Assertions.assertFalse(gvl.getFeatures().get(0).getIllustrations().isPresent()); Assertions.assertEquals(1, gvl.getSpecialFeatures().get(0).getId()); - Assertions.assertEquals("Use precise geolocation data", gvl.getSpecialFeatures().get(0).getName()); + Assertions.assertEquals( + "Use precise geolocation data", gvl.getSpecialFeatures().get(0).getName()); Assertions.assertEquals( "Your precise geolocation data can be used in support of one or more purposes. This means your location can be accurate to within several meters.", gvl.getSpecialFeatures().get(0).getDescription()); @@ -91,32 +98,39 @@ public void test() throws IOException { Assertions.assertFalse(gvl.getSpecialFeatures().get(0).getIllustrations().isPresent()); Assertions.assertEquals(1, gvl.getStacks().get(0).getId()); - Assertions.assertEquals("Precise geolocation data, and identification through device scanning", gvl.getStacks().get(0).getName()); - Assertions.assertEquals("Precise geolocation and information about device characteristics can be used.", gvl.getStacks().get(0).getDescription()); + Assertions.assertEquals( + "Precise geolocation data, and identification through device scanning", + gvl.getStacks().get(0).getName()); + Assertions.assertEquals( + "Precise geolocation and information about device characteristics can be used.", + gvl.getStacks().get(0).getDescription()); Assertions.assertTrue(gvl.getStacks().get(0).getPurposes().isEmpty()); Assertions.assertEquals(Arrays.asList(1, 2), gvl.getStacks().get(0).getSpecialFeatures()); - + Assertions.assertEquals(2, gvl.getStacks().get(1).getId()); Assertions.assertEquals("Basic ads, and ad measurement", gvl.getStacks().get(1).getName()); - Assertions.assertEquals("Basic ads can be served. Ad performance can be measured.", gvl.getStacks().get(1).getDescription()); + Assertions.assertEquals( + "Basic ads can be served. Ad performance can be measured.", + gvl.getStacks().get(1).getDescription()); Assertions.assertEquals(Arrays.asList(2, 7), gvl.getStacks().get(1).getPurposes()); Assertions.assertTrue(gvl.getStacks().get(1).getSpecialFeatures().isEmpty()); - - Assertions.assertEquals(8, gvl.getVendors().get(0).getId()); + + Assertions.assertEquals(8, gvl.getVendors().get(0).getId()); Assertions.assertFalse(gvl.getVendors().get(0).getDeletedDate().isPresent()); Assertions.assertEquals("Emerse Sverige AB", gvl.getVendors().get(0).getName()); Assertions.assertEquals(Arrays.asList(1, 3, 4), gvl.getVendors().get(0).getPurposes()); Assertions.assertTrue(gvl.getVendors().get(0).getLegIntPurposes().isPresent()); - Assertions.assertEquals(Arrays.asList(2, 7, 8, 9), gvl.getVendors().get(0).getLegIntPurposes().get()); - Assertions.assertEquals(Arrays.asList(2, 9), gvl.getVendors().get(0).getFlexiblePurposes()); - Assertions.assertEquals(Arrays.asList(1, 2), gvl.getVendors().get(0).getSpecialPurposes()); - Assertions.assertEquals(Arrays.asList(1, 2), gvl.getVendors().get(0).getFeatures()); + Assertions.assertEquals( + Arrays.asList(2, 7, 8, 9), gvl.getVendors().get(0).getLegIntPurposes().get()); + Assertions.assertEquals(Arrays.asList(2, 9), gvl.getVendors().get(0).getFlexiblePurposes()); + Assertions.assertEquals(Arrays.asList(1, 2), gvl.getVendors().get(0).getSpecialPurposes()); + Assertions.assertEquals(Arrays.asList(1, 2), gvl.getVendors().get(0).getFeatures()); Assertions.assertTrue(gvl.getVendors().get(0).getSpecialFeatures().isEmpty()); Assertions.assertTrue(gvl.getVendors().get(0).getPolicyUrl().isPresent()); - Assertions.assertEquals("https://www.emerse.com/privacy-policy/", gvl.getVendors().get(0).getPolicyUrl().get()); - - Assertions.assertEquals(9, gvl.getVendors().get(1).getId()); + Assertions.assertEquals( + "https://www.emerse.com/privacy-policy/", gvl.getVendors().get(0).getPolicyUrl().get()); + + Assertions.assertEquals(9, gvl.getVendors().get(1).getId()); Assertions.assertTrue(gvl.getVendors().get(1).getDeletedDate().isPresent()); } - } diff --git a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/GvlV3Test.java b/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/GvlV3Test.java index e27831f1..3a554b71 100644 --- a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/GvlV3Test.java +++ b/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/GvlV3Test.java @@ -20,21 +20,24 @@ * #L% */ +import com.iab.gpp.extras.gvl.Gvl; +import com.iab.gpp.extras.jackson.Loader; import java.io.IOException; import java.util.Arrays; import java.util.Collections; - import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import com.iab.gpp.extras.gvl.Gvl; -import com.iab.gpp.extras.jackson.Loader; public class GvlV3Test { @Test public void test() throws IOException { - Gvl gvl = new Loader() - .globalVendorList(GvlV3Test.class.getClassLoader().getResourceAsStream("vendorlist/v3.0/vendor-list.json")); + Gvl gvl = + new Loader() + .globalVendorList( + GvlV3Test.class + .getClassLoader() + .getResourceAsStream("vendorlist/v3.0/vendor-list.json")); Assertions.assertTrue(gvl.getDataCategories().isPresent()); Assertions.assertEquals(3, gvl.getFeatures().size()); Assertions.assertEquals(3, gvl.getGvlSpecificationVersion()); @@ -46,64 +49,91 @@ public void test() throws IOException { Assertions.assertEquals(4, gvl.getTcfPolicyVersion()); Assertions.assertEquals(7, gvl.getVendorListVersion()); Assertions.assertEquals(376, gvl.getVendors().size()); - + Assertions.assertEquals(1, gvl.getPurposes().get(0).getId()); - Assertions.assertEquals("Store and/or access information on a device", gvl.getPurposes().get(0).getName()); - Assertions.assertEquals("Cookies, device or similar online identifiers (e.g. login-based identifiers, randomly assigned identifiers, network based identifiers) together with other information (e.g. browser type and information, language, screen size, supported technologies etc.) can be stored or read on your device to recognise it each time it connects to an app or to a website, for one or several of the purposes presented here. ", gvl.getPurposes().get(0).getDescription()); + Assertions.assertEquals( + "Store and/or access information on a device", gvl.getPurposes().get(0).getName()); + Assertions.assertEquals( + "Cookies, device or similar online identifiers (e.g. login-based identifiers, randomly assigned identifiers, network based identifiers) together with other information (e.g. browser type and information, language, screen size, supported technologies etc.) can be stored or read on your device to recognise it each time it connects to an app or to a website, for one or several of the purposes presented here. ", + gvl.getPurposes().get(0).getDescription()); Assertions.assertFalse(gvl.getPurposes().get(0).getDescriptionLegal().isPresent()); Assertions.assertTrue(gvl.getPurposes().get(0).getIllustrations().isPresent()); Assertions.assertEquals(1, gvl.getPurposes().get(0).getIllustrations().get().size()); - + Assertions.assertEquals(1, gvl.getSpecialPurposes().get(0).getId()); - Assertions.assertEquals("Ensure security, prevent and detect fraud, and fix errors\n", gvl.getSpecialPurposes().get(0).getName()); - Assertions.assertEquals("Your data can be used to monitor for and prevent unusual and possibly fraudulent activity (for example, regarding advertising, ad clicks by bots), and ensure systems and processes work properly and securely. It can also be used to correct any problems you, the publisher or the advertiser may encounter in the delivery of content and ads and in your interaction with them.", gvl.getSpecialPurposes().get(0).getDescription()); + Assertions.assertEquals( + "Ensure security, prevent and detect fraud, and fix errors\n", + gvl.getSpecialPurposes().get(0).getName()); + Assertions.assertEquals( + "Your data can be used to monitor for and prevent unusual and possibly fraudulent activity (for example, regarding advertising, ad clicks by bots), and ensure systems and processes work properly and securely. It can also be used to correct any problems you, the publisher or the advertiser may encounter in the delivery of content and ads and in your interaction with them.", + gvl.getSpecialPurposes().get(0).getDescription()); Assertions.assertFalse(gvl.getSpecialPurposes().get(0).getDescriptionLegal().isPresent()); Assertions.assertTrue(gvl.getSpecialPurposes().get(0).getIllustrations().isPresent()); Assertions.assertEquals(1, gvl.getSpecialPurposes().get(0).getIllustrations().get().size()); - + Assertions.assertEquals(1, gvl.getFeatures().get(0).getId()); - Assertions.assertEquals("Match and combine data from other data sources", gvl.getFeatures().get(0).getName()); - Assertions.assertEquals("Information about your activity on this service may be matched and combined with other information relating to you and originating from various sources (for instance your activity on a separate online service, your use of a loyalty card in-store, or your answers to a survey), in support of the purposes explained in this notice.", gvl.getFeatures().get(0).getDescription()); + Assertions.assertEquals( + "Match and combine data from other data sources", gvl.getFeatures().get(0).getName()); + Assertions.assertEquals( + "Information about your activity on this service may be matched and combined with other information relating to you and originating from various sources (for instance your activity on a separate online service, your use of a loyalty card in-store, or your answers to a survey), in support of the purposes explained in this notice.", + gvl.getFeatures().get(0).getDescription()); Assertions.assertFalse(gvl.getFeatures().get(0).getDescriptionLegal().isPresent()); Assertions.assertTrue(gvl.getFeatures().get(0).getIllustrations().isPresent()); Assertions.assertEquals(0, gvl.getFeatures().get(0).getIllustrations().get().size()); - + Assertions.assertEquals(1, gvl.getSpecialFeatures().get(0).getId()); - Assertions.assertEquals("Use precise geolocation data", gvl.getSpecialFeatures().get(0).getName()); - Assertions.assertEquals("With your acceptance, your precise location (within a radius of less than 500 metres) may be used in support of the purposes explained in this notice.", gvl.getSpecialFeatures().get(0).getDescription()); + Assertions.assertEquals( + "Use precise geolocation data", gvl.getSpecialFeatures().get(0).getName()); + Assertions.assertEquals( + "With your acceptance, your precise location (within a radius of less than 500 metres) may be used in support of the purposes explained in this notice.", + gvl.getSpecialFeatures().get(0).getDescription()); Assertions.assertFalse(gvl.getSpecialFeatures().get(0).getDescriptionLegal().isPresent()); Assertions.assertTrue(gvl.getSpecialFeatures().get(0).getIllustrations().isPresent()); Assertions.assertEquals(0, gvl.getSpecialFeatures().get(0).getIllustrations().get().size()); - + Assertions.assertEquals(1, gvl.getStacks().get(0).getId()); - Assertions.assertEquals("Precise geolocation data, and identification through device scanning", gvl.getStacks().get(0).getName()); - Assertions.assertEquals("Precise geolocation and information about device characteristics can be used.\n\n", gvl.getStacks().get(0).getDescription()); + Assertions.assertEquals( + "Precise geolocation data, and identification through device scanning", + gvl.getStacks().get(0).getName()); + Assertions.assertEquals( + "Precise geolocation and information about device characteristics can be used.\n\n", + gvl.getStacks().get(0).getDescription()); Assertions.assertTrue(gvl.getStacks().get(0).getPurposes().isEmpty()); Assertions.assertEquals(Arrays.asList(1, 2), gvl.getStacks().get(0).getSpecialFeatures()); - + Assertions.assertEquals(2, gvl.getStacks().get(1).getId()); - Assertions.assertEquals("Advertising based on limited data and advertising measurement", gvl.getStacks().get(1).getName()); - Assertions.assertEquals("Advertising can be presented based on limited data. Advertising performance can be measured.", gvl.getStacks().get(1).getDescription()); + Assertions.assertEquals( + "Advertising based on limited data and advertising measurement", + gvl.getStacks().get(1).getName()); + Assertions.assertEquals( + "Advertising can be presented based on limited data. Advertising performance can be measured.", + gvl.getStacks().get(1).getDescription()); Assertions.assertEquals(Arrays.asList(2, 7), gvl.getStacks().get(1).getPurposes()); Assertions.assertTrue(gvl.getStacks().get(1).getSpecialFeatures().isEmpty()); - + Assertions.assertEquals(1, gvl.getDataCategories().get().get(0).getId()); Assertions.assertEquals("IP addresses", gvl.getDataCategories().get().get(0).getName()); - Assertions.assertEquals("Your IP address is a number assigned by your Internet Service Provider to any Internet connection. It is not always specific to your device and is not always a stable identifier.\nIt is used to route information on the Internet and display online content (including ads) on your connected device.", gvl.getDataCategories().get().get(0).getDescription()); - - Assertions.assertEquals(1, gvl.getVendors().get(0).getId()); + Assertions.assertEquals( + "Your IP address is a number assigned by your Internet Service Provider to any Internet connection. It is not always specific to your device and is not always a stable identifier.\nIt is used to route information on the Internet and display online content (including ads) on your connected device.", + gvl.getDataCategories().get().get(0).getDescription()); + + Assertions.assertEquals(1, gvl.getVendors().get(0).getId()); Assertions.assertFalse(gvl.getVendors().get(0).getDeletedDate().isPresent()); - Assertions.assertEquals("Exponential Interactive, Inc d/b/a VDX.tv", gvl.getVendors().get(0).getName()); - Assertions.assertEquals(Arrays.asList(1, 2, 3, 4, 7, 8, 9, 10), gvl.getVendors().get(0).getPurposes()); + Assertions.assertEquals( + "Exponential Interactive, Inc d/b/a VDX.tv", gvl.getVendors().get(0).getName()); + Assertions.assertEquals( + Arrays.asList(1, 2, 3, 4, 7, 8, 9, 10), gvl.getVendors().get(0).getPurposes()); Assertions.assertTrue(gvl.getVendors().get(0).getLegIntPurposes().isPresent()); - Assertions.assertEquals(Collections.emptyList(), gvl.getVendors().get(0).getLegIntPurposes().get()); - Assertions.assertEquals(Arrays.asList(7, 8, 9, 10), gvl.getVendors().get(0).getFlexiblePurposes()); - Assertions.assertEquals(Arrays.asList(1, 2), gvl.getVendors().get(0).getSpecialPurposes()); - Assertions.assertEquals(Arrays.asList(1, 2, 3), gvl.getVendors().get(0).getFeatures()); + Assertions.assertEquals( + Collections.emptyList(), gvl.getVendors().get(0).getLegIntPurposes().get()); + Assertions.assertEquals( + Arrays.asList(7, 8, 9, 10), gvl.getVendors().get(0).getFlexiblePurposes()); + Assertions.assertEquals(Arrays.asList(1, 2), gvl.getVendors().get(0).getSpecialPurposes()); + Assertions.assertEquals(Arrays.asList(1, 2, 3), gvl.getVendors().get(0).getFeatures()); Assertions.assertTrue(gvl.getVendors().get(0).getSpecialFeatures().isEmpty()); Assertions.assertFalse(gvl.getVendors().get(0).getPolicyUrl().isPresent()); Assertions.assertTrue(gvl.getVendors().get(0).getCookieMaxAgeSeconds().isPresent()); - Assertions.assertEquals(7776000, gvl.getVendors().get(0).getCookieMaxAgeSeconds().get()); + Assertions.assertEquals(7776000, gvl.getVendors().get(0).getCookieMaxAgeSeconds().get()); Assertions.assertTrue(gvl.getVendors().get(0).getUsesCookies().isPresent()); Assertions.assertTrue(gvl.getVendors().get(0).getUsesCookies().get()); Assertions.assertTrue(gvl.getVendors().get(0).getCookieRefresh().isPresent()); @@ -111,34 +141,45 @@ public void test() throws IOException { Assertions.assertTrue(gvl.getVendors().get(0).getUsesNonCookieAccess().isPresent()); Assertions.assertFalse(gvl.getVendors().get(0).getUsesNonCookieAccess().get()); Assertions.assertTrue(gvl.getVendors().get(0).getDataRetention().isPresent()); - Assertions.assertTrue(gvl.getVendors().get(0).getDataRetention().get().getStdRetention().isPresent()); - Assertions.assertEquals(397, gvl.getVendors().get(0).getDataRetention().get().getStdRetention().get()); + Assertions.assertTrue( + gvl.getVendors().get(0).getDataRetention().get().getStdRetention().isPresent()); + Assertions.assertEquals( + 397, gvl.getVendors().get(0).getDataRetention().get().getStdRetention().get()); Assertions.assertTrue(gvl.getVendors().get(0).getDataRetention().get().getPurposes().isEmpty()); - Assertions.assertTrue(gvl.getVendors().get(0).getDataRetention().get().getSpecialPurposes().isEmpty()); + Assertions.assertTrue( + gvl.getVendors().get(0).getDataRetention().get().getSpecialPurposes().isEmpty()); Assertions.assertTrue(gvl.getVendors().get(0).getUrls().isPresent()); Assertions.assertEquals(1, gvl.getVendors().get(0).getUrls().get().size()); Assertions.assertEquals("en", gvl.getVendors().get(0).getUrls().get().get(0).getLangId()); - Assertions.assertEquals("https://vdx.tv/privacy/", gvl.getVendors().get(0).getUrls().get().get(0).getPrivacy()); - Assertions.assertTrue(gvl.getVendors().get(0).getUrls().get().get(0).getLegIntClaim().isPresent()); - Assertions.assertEquals("https://cdnx.exponential.com/wp-content/uploads/2018/04/Balancing-Assessment-for-Legitimate-Interest-Publishers-v2.pdf", gvl.getVendors().get(0).getUrls().get().get(0).getLegIntClaim().get()); + Assertions.assertEquals( + "https://vdx.tv/privacy/", gvl.getVendors().get(0).getUrls().get().get(0).getPrivacy()); + Assertions.assertTrue( + gvl.getVendors().get(0).getUrls().get().get(0).getLegIntClaim().isPresent()); + Assertions.assertEquals( + "https://cdnx.exponential.com/wp-content/uploads/2018/04/Balancing-Assessment-for-Legitimate-Interest-Publishers-v2.pdf", + gvl.getVendors().get(0).getUrls().get().get(0).getLegIntClaim().get()); Assertions.assertTrue(gvl.getVendors().get(0).getDataDeclaration().isPresent()); - Assertions.assertEquals(Arrays.asList(1, 3, 4, 6, 8, 10, 11), gvl.getVendors().get(0).getDataDeclaration().get()); + Assertions.assertEquals( + Arrays.asList(1, 3, 4, 6, 8, 10, 11), gvl.getVendors().get(0).getDataDeclaration().get()); Assertions.assertTrue(gvl.getVendors().get(0).getDeviceStorageDisclosureUrl().isPresent()); - Assertions.assertEquals("https://vdxtv.expo.workers.dev", gvl.getVendors().get(0).getDeviceStorageDisclosureUrl().get()); - - Assertions.assertEquals(12, gvl.getVendors().get(4).getId()); + Assertions.assertEquals( + "https://vdxtv.expo.workers.dev", + gvl.getVendors().get(0).getDeviceStorageDisclosureUrl().get()); + + Assertions.assertEquals(12, gvl.getVendors().get(4).getId()); Assertions.assertFalse(gvl.getVendors().get(4).getDeletedDate().isPresent()); Assertions.assertEquals("BeeswaxIO Corporation", gvl.getVendors().get(4).getName()); - Assertions.assertEquals(Arrays.asList(1, 2, 3, 4, 7), gvl.getVendors().get(4).getPurposes()); + Assertions.assertEquals(Arrays.asList(1, 2, 3, 4, 7), gvl.getVendors().get(4).getPurposes()); Assertions.assertTrue(gvl.getVendors().get(4).getLegIntPurposes().isPresent()); - Assertions.assertEquals(Collections.emptyList(), gvl.getVendors().get(4).getLegIntPurposes().get()); - Assertions.assertEquals(Collections.emptyList(), gvl.getVendors().get(4).getFlexiblePurposes()); - Assertions.assertEquals(Arrays.asList(1, 2), gvl.getVendors().get(4).getSpecialPurposes()); - Assertions.assertEquals(Arrays.asList(1, 3), gvl.getVendors().get(4).getFeatures()); - Assertions.assertEquals(Arrays.asList(1), gvl.getVendors().get(4).getSpecialFeatures()); + Assertions.assertEquals( + Collections.emptyList(), gvl.getVendors().get(4).getLegIntPurposes().get()); + Assertions.assertEquals(Collections.emptyList(), gvl.getVendors().get(4).getFlexiblePurposes()); + Assertions.assertEquals(Arrays.asList(1, 2), gvl.getVendors().get(4).getSpecialPurposes()); + Assertions.assertEquals(Arrays.asList(1, 3), gvl.getVendors().get(4).getFeatures()); + Assertions.assertEquals(Arrays.asList(1), gvl.getVendors().get(4).getSpecialFeatures()); Assertions.assertFalse(gvl.getVendors().get(4).getPolicyUrl().isPresent()); Assertions.assertTrue(gvl.getVendors().get(4).getCookieMaxAgeSeconds().isPresent()); - Assertions.assertEquals(34109999, gvl.getVendors().get(4).getCookieMaxAgeSeconds().get()); + Assertions.assertEquals(34109999, gvl.getVendors().get(4).getCookieMaxAgeSeconds().get()); Assertions.assertTrue(gvl.getVendors().get(4).getUsesCookies().isPresent()); Assertions.assertTrue(gvl.getVendors().get(4).getUsesCookies().get()); Assertions.assertTrue(gvl.getVendors().get(4).getCookieRefresh().isPresent()); @@ -146,26 +187,40 @@ public void test() throws IOException { Assertions.assertTrue(gvl.getVendors().get(4).getUsesNonCookieAccess().isPresent()); Assertions.assertTrue(gvl.getVendors().get(4).getUsesNonCookieAccess().get()); Assertions.assertTrue(gvl.getVendors().get(4).getDataRetention().isPresent()); - Assertions.assertTrue(gvl.getVendors().get(4).getDataRetention().get().getStdRetention().isPresent()); - Assertions.assertEquals(0, gvl.getVendors().get(4).getDataRetention().get().getStdRetention().get()); - Assertions.assertEquals(1, gvl.getVendors().get(4).getDataRetention().get().getPurposes().size()); - Assertions.assertEquals(4320, gvl.getVendors().get(4).getDataRetention().get().getPurposes().get(7)); - Assertions.assertEquals(2, gvl.getVendors().get(4).getDataRetention().get().getSpecialPurposes().size()); - Assertions.assertEquals(392, gvl.getVendors().get(4).getDataRetention().get().getSpecialPurposes().get(1)); - Assertions.assertEquals(4320, gvl.getVendors().get(4).getDataRetention().get().getSpecialPurposes().get(2)); + Assertions.assertTrue( + gvl.getVendors().get(4).getDataRetention().get().getStdRetention().isPresent()); + Assertions.assertEquals( + 0, gvl.getVendors().get(4).getDataRetention().get().getStdRetention().get()); + Assertions.assertEquals( + 1, gvl.getVendors().get(4).getDataRetention().get().getPurposes().size()); + Assertions.assertEquals( + 4320, gvl.getVendors().get(4).getDataRetention().get().getPurposes().get(7)); + Assertions.assertEquals( + 2, gvl.getVendors().get(4).getDataRetention().get().getSpecialPurposes().size()); + Assertions.assertEquals( + 392, gvl.getVendors().get(4).getDataRetention().get().getSpecialPurposes().get(1)); + Assertions.assertEquals( + 4320, gvl.getVendors().get(4).getDataRetention().get().getSpecialPurposes().get(2)); Assertions.assertTrue(gvl.getVendors().get(4).getUrls().isPresent()); Assertions.assertEquals(1, gvl.getVendors().get(4).getUrls().get().size()); Assertions.assertEquals("en", gvl.getVendors().get(4).getUrls().get().get(0).getLangId()); - Assertions.assertEquals("https://www.beeswax.com/privacy/", gvl.getVendors().get(4).getUrls().get().get(0).getPrivacy()); - Assertions.assertTrue(gvl.getVendors().get(4).getUrls().get().get(0).getLegIntClaim().isPresent()); - Assertions.assertEquals("https://www.beeswax.com/privacy/", gvl.getVendors().get(4).getUrls().get().get(0).getLegIntClaim().get()); + Assertions.assertEquals( + "https://www.beeswax.com/privacy/", + gvl.getVendors().get(4).getUrls().get().get(0).getPrivacy()); + Assertions.assertTrue( + gvl.getVendors().get(4).getUrls().get().get(0).getLegIntClaim().isPresent()); + Assertions.assertEquals( + "https://www.beeswax.com/privacy/", + gvl.getVendors().get(4).getUrls().get().get(0).getLegIntClaim().get()); Assertions.assertTrue(gvl.getVendors().get(4).getDataDeclaration().isPresent()); - Assertions.assertEquals(Arrays.asList(1, 2, 3, 4, 6, 8, 9, 11), gvl.getVendors().get(4).getDataDeclaration().get()); + Assertions.assertEquals( + Arrays.asList(1, 2, 3, 4, 6, 8, 9, 11), gvl.getVendors().get(4).getDataDeclaration().get()); Assertions.assertTrue(gvl.getVendors().get(4).getDeviceStorageDisclosureUrl().isPresent()); - Assertions.assertEquals("https://beeswax.com/devicedisclosure.json", gvl.getVendors().get(4).getDeviceStorageDisclosureUrl().get()); - + Assertions.assertEquals( + "https://beeswax.com/devicedisclosure.json", + gvl.getVendors().get(4).getDeviceStorageDisclosureUrl().get()); + Assertions.assertTrue(gvl.getVendor(26).getCookieRefresh().isPresent()); Assertions.assertFalse(gvl.getVendor(26).getCookieRefresh().get()); } - } diff --git a/iabgpp-extras/src/main/java/com/iab/gpp/extras/cmp/CmpList.java b/iabgpp-extras/src/main/java/com/iab/gpp/extras/cmp/CmpList.java index 5f3c3d4a..9bf72400 100644 --- a/iabgpp-extras/src/main/java/com/iab/gpp/extras/cmp/CmpList.java +++ b/iabgpp-extras/src/main/java/com/iab/gpp/extras/cmp/CmpList.java @@ -46,5 +46,4 @@ public interface CmpList { * @return {@link Cmp} object */ Cmp getCmp(int cmpId); - } diff --git a/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/DataCategory.java b/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/DataCategory.java index e7e62cc3..4d54ae7c 100644 --- a/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/DataCategory.java +++ b/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/DataCategory.java @@ -25,5 +25,4 @@ public interface DataCategory { * @return description */ String getDescription(); - } diff --git a/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/DataRetention.java b/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/DataRetention.java index 12615dfa..ec11c2f1 100644 --- a/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/DataRetention.java +++ b/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/DataRetention.java @@ -1,6 +1,5 @@ package com.iab.gpp.extras.gvl; -import java.util.List; import java.util.Map; import java.util.Optional; @@ -49,5 +48,4 @@ public interface DataRetention { * @return specialPurposes */ Map getSpecialPurposes(); - } diff --git a/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/Gvl.java b/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/Gvl.java index a1a6e545..057820a2 100644 --- a/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/Gvl.java +++ b/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/Gvl.java @@ -106,8 +106,8 @@ public interface Gvl { /** * A list of data categories - * @since 3.0 * + * @since 3.0 * @return A {@link List} of {@link DataCategory} objects */ Optional> getDataCategories(); diff --git a/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/Overflow.java b/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/Overflow.java index 12a74b0e..638236c0 100644 --- a/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/Overflow.java +++ b/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/Overflow.java @@ -9,9 +9,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -20,7 +20,6 @@ * #L% */ - public interface Overflow { /** diff --git a/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/Purpose.java b/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/Purpose.java index 2f2812d7..38a17ff5 100644 --- a/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/Purpose.java +++ b/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/Purpose.java @@ -23,9 +23,7 @@ * #L% */ -/** - * A standard purpose - */ +/** A standard purpose */ public interface Purpose { /** @@ -51,20 +49,22 @@ public interface Purpose { /** * Legal description of the purpose + * * @return legal description string */ Optional getDescriptionLegal(); /** * A list of illustrations + * * @since 3.0 * @return A {@link List} of strings */ Optional> getIllustrations(); /** - * An optional flag where false means CMPs should never afford users the means to provide an opt-in - * consent choice + * An optional flag where false means CMPs should never afford users the means to provide an + * opt-in consent choice * * @return consentable boolean */ diff --git a/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/SpecialFeature.java b/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/SpecialFeature.java index c6691277..40501d6c 100644 --- a/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/SpecialFeature.java +++ b/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/SpecialFeature.java @@ -25,6 +25,4 @@ * signal an opt-in choice as to whether vendors may employ the feature when performing any purpose * processing. See Policies for specifics. */ -public interface SpecialFeature extends Feature { - -} +public interface SpecialFeature extends Feature {} diff --git a/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/SpecialPurpose.java b/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/SpecialPurpose.java index f288572f..d987d30b 100644 --- a/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/SpecialPurpose.java +++ b/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/SpecialPurpose.java @@ -20,9 +20,5 @@ * #L% */ -/** - * A special purpose declared as performed on the legal basis of a legitimate interest - */ -public interface SpecialPurpose extends Purpose { - -} +/** A special purpose declared as performed on the legal basis of a legitimate interest */ +public interface SpecialPurpose extends Purpose {} diff --git a/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/Vendor.java b/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/Vendor.java index 480a21b7..f17062e2 100644 --- a/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/Vendor.java +++ b/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/Vendor.java @@ -27,8 +27,8 @@ public interface Vendor { /** - * A vendor id: a numeric ID which is incrementally assigned and never re-used – deleted Vendors are - * just marked as deleted + * A vendor id: a numeric ID which is incrementally assigned and never re-used – deleted Vendors + * are just marked as deleted * * @return vendor id */ @@ -49,8 +49,8 @@ public interface Vendor { List getPurposes(); /** - * List of Purposes for which the vendor requires to be transparently disclosed as their legitimate - * interest + * List of Purposes for which the vendor requires to be transparently disclosed as their + * legitimate interest * * @return A {@link List} of purpose ids disclosed as legitimate interests */ @@ -66,8 +66,8 @@ public interface Vendor { /** * List of purposes where the vendor is flexible regarding the legal basis; they will perform the - * processing based on consent or a legitimate interest. The 'default' is determined by which of the - * other two mutually-exclusive purpose fields is used to declare the purpose for the vendor + * processing based on consent or a legitimate interest. The 'default' is determined by which of + * the other two mutually-exclusive purpose fields is used to declare the purpose for the vendor * * @return A {@link List} of flexible purpose ids */ @@ -97,6 +97,7 @@ public interface Vendor { /** * GDPR/privacy policy page URL + * * @deprecated since 3.0 * @return policy url string */ @@ -111,7 +112,8 @@ public interface Vendor { /** * object specifying the vendor's http GET request length limit. It is optional. If a vendor entry - * does not include this attribute then the vendor has no overflow options and none can be inferred. + * does not include this attribute then the vendor has no overflow options and none can be + * inferred. * * @return A {@link Overflow} object */ @@ -125,23 +127,23 @@ public interface Vendor { boolean isDeleted(); /** - * The number of seconds representing the longest potential duration for cookie storage on a device. - * If a Vendor uses multiple cookies with differing durations, cookieMaxAgeSeconds represents the - * cookie with the longest duration. Note: cookies are the only method of storage or device access - * that permit a predictable duration to be set. This is required only if usesCookies is set to - * true, else optional - * - * @return The number, in seconds, of the longest potential duration for storage on a device, as set - * when using the cookie method of storage. A negative number or a 0 indicate session - * storage similar to the Set-Cookie spec. A "-100" value no longer indicates no cookie - * usage. Note: this only includes what is declared when the storage is set and does not - * consider duration extensions should storage be refreshed + * The number of seconds representing the longest potential duration for cookie storage on a + * device. If a Vendor uses multiple cookies with differing durations, cookieMaxAgeSeconds + * represents the cookie with the longest duration. Note: cookies are the only method of storage + * or device access that permit a predictable duration to be set. This is required only if + * usesCookies is set to true, else optional + * + * @return The number, in seconds, of the longest potential duration for storage on a device, as + * set when using the cookie method of storage. A negative number or a 0 indicate session + * storage similar to the Set-Cookie spec. A "-100" value no longer indicates no cookie usage. + * Note: this only includes what is declared when the storage is set and does not consider + * duration extensions should storage be refreshed */ Optional getCookieMaxAgeSeconds(); /** * This boolean field indicates whether the vendor uses cookie storage (session or otherwise). - * + * * @return True indicates cookie storage is used */ Optional getUsesCookies(); @@ -149,47 +151,49 @@ public interface Vendor { /** * This true or false field indicates whether any cookies in scope for cookieMaxAgeSeconds are * refreshed after being initially set. - * + * * @return True indicates the vendor refreshes this cookie */ - Optional getCookieRefresh(); + Optional getCookieRefresh(); /** * This boolean field indicates whether the vendor uses other, non-cookie methods of storage or * accessing information already stored on a user’s device. Examples of non-cookie storage and * access may be localStorage, indexDB, mobile ad IDs, etc. - * + * * @return True indicates non-cookie access is used */ - Optional getUsesNonCookieAccess(); + Optional getUsesNonCookieAccess(); /** * Link to a recommended, vendor-hosted, secure URL for disclosing additional storage information - * + * * @return Location of vendor-hosted deviceStorage.json file */ Optional getDeviceStorageDisclosureUrl(); /** * This object indicates how long vendors retain user's data for each declared purpose + * * @since 3.0 - * * @return {@link DataRetention} object */ Optional getDataRetention(); /** - * This list indicates unique urls to privacy policies by language and link to an - * explanation of their legitimate interests at stake + * This list indicates unique urls to privacy policies by language and link to an explanation of + * their legitimate interests at stake + * * @since 3.0 * @return A {@link List} of {@link VendorUrl} objects */ Optional> getUrls(); /** - * This list of integers indicates data categories {@link DataCategory} that vendors collect and process - * @since 3.0 + * This list of integers indicates data categories {@link DataCategory} that vendors collect and + * process * + * @since 3.0 * @return A {@link List} of integers */ Optional> getDataDeclaration(); diff --git a/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/VendorUrl.java b/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/VendorUrl.java index 7a495de7..af548f64 100644 --- a/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/VendorUrl.java +++ b/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/VendorUrl.java @@ -47,5 +47,4 @@ public interface VendorUrl { * @return legIntClaim */ Optional getLegIntClaim(); - } From 2fd8542e8a64f25ab66b9f1bc305a9cc2e31808a Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Thu, 19 Feb 2026 11:03:24 -0500 Subject: [PATCH 82/86] remove useless formatter on/off --- .../java/com/iab/gpp/encoder/field/HeaderV1Field.java | 3 --- .../main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java | 6 ------ .../main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java | 8 -------- .../main/java/com/iab/gpp/encoder/field/UsCaField.java | 4 ---- .../main/java/com/iab/gpp/encoder/field/UsCoField.java | 4 ---- .../main/java/com/iab/gpp/encoder/field/UsCtField.java | 4 ---- .../main/java/com/iab/gpp/encoder/field/UsDeField.java | 4 ---- .../main/java/com/iab/gpp/encoder/field/UsFlField.java | 2 -- .../main/java/com/iab/gpp/encoder/field/UsIaField.java | 4 ---- .../main/java/com/iab/gpp/encoder/field/UsMtField.java | 4 ---- .../main/java/com/iab/gpp/encoder/field/UsNatField.java | 4 ---- .../main/java/com/iab/gpp/encoder/field/UsNeField.java | 4 ---- .../main/java/com/iab/gpp/encoder/field/UsNhField.java | 4 ---- .../main/java/com/iab/gpp/encoder/field/UsNjField.java | 4 ---- .../main/java/com/iab/gpp/encoder/field/UsOrField.java | 4 ---- .../main/java/com/iab/gpp/encoder/field/UsTnField.java | 4 ---- .../main/java/com/iab/gpp/encoder/field/UsTxField.java | 4 ---- .../main/java/com/iab/gpp/encoder/field/UsUtField.java | 2 -- .../main/java/com/iab/gpp/encoder/field/UsVaField.java | 2 -- .../main/java/com/iab/gpp/encoder/field/UspV1Field.java | 2 -- 20 files changed, 77 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java index 65ecd219..ebe11eba 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java @@ -21,9 +21,6 @@ public enum HeaderV1Field implements FieldKey { return type; } - // @formatter:off public static final FieldNames HEADER_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>(HeaderV1Field.ID, HeaderV1Field.VERSION, HeaderV1Field.SECTION_IDS); - // @formatter:on - } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java index 8773a0bd..6f264b7d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java @@ -54,7 +54,6 @@ public enum TcfCaV1Field implements FieldKey { return type; } - // @formatter:off public static final FieldNames TCFCAV1_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( TcfCaV1Field.VERSION, @@ -73,9 +72,7 @@ public enum TcfCaV1Field implements FieldKey { TcfCaV1Field.VENDOR_EXPRESS_CONSENT, TcfCaV1Field.VENDOR_IMPLIED_CONSENT, TcfCaV1Field.PUB_RESTRICTIONS); - // @formatter:on - // @formatter:off public static final FieldNames TCFCAV1_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES = new FieldNames<>( TcfCaV1Field.PUB_PURPOSES_SEGMENT_TYPE, @@ -84,10 +81,7 @@ public enum TcfCaV1Field implements FieldKey { TcfCaV1Field.NUM_CUSTOM_PURPOSES, TcfCaV1Field.CUSTOM_PURPOSES_EXPRESS_CONSENT, TcfCaV1Field.CUSTOM_PURPOSES_IMPLIED_CONSENT); - // @formatter:on - // @formatter:off public static final FieldNames TCFCAV1_DISCLOSED_VENDORS_SEGMENT_FIELD_NAMES = new FieldNames<>(TcfCaV1Field.DISCLOSED_VENDORS_SEGMENT_TYPE, TcfCaV1Field.DISCLOSED_VENDORS); - // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java index 1218117f..45046e73 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java @@ -57,7 +57,6 @@ public enum TcfEuV2Field implements FieldKey { return type; } - // @formatter:off public static final FieldNames TCFEUV2_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( TcfEuV2Field.VERSION, @@ -79,9 +78,7 @@ public enum TcfEuV2Field implements FieldKey { TcfEuV2Field.VENDOR_CONSENTS, TcfEuV2Field.VENDOR_LEGITIMATE_INTERESTS, TcfEuV2Field.PUBLISHER_RESTRICTIONS); - // @formatter:on - // @formatter:off public static final FieldNames TCFEUV2_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES = new FieldNames<>( TcfEuV2Field.PUBLISHER_PURPOSES_SEGMENT_TYPE, @@ -90,15 +87,10 @@ public enum TcfEuV2Field implements FieldKey { TcfEuV2Field.NUM_CUSTOM_PURPOSES, TcfEuV2Field.PUBLISHER_CUSTOM_CONSENTS, TcfEuV2Field.PUBLISHER_CUSTOM_LEGITIMATE_INTERESTS); - // @formatter:on - // @formatter:off public static final FieldNames TCFEUV2_VENDORS_ALLOWED_SEGMENT_FIELD_NAMES = new FieldNames<>(TcfEuV2Field.VENDORS_ALLOWED_SEGMENT_TYPE, TcfEuV2Field.VENDORS_ALLOWED); - // @formatter:on - // @formatter:off public static final FieldNames TCFEUV2_VENDORS_DISCLOSED_SEGMENT_FIELD_NAMES = new FieldNames<>(TcfEuV2Field.VENDORS_DISCLOSED_SEGMENT_TYPE, TcfEuV2Field.VENDORS_DISCLOSED); - // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java index af7f1e41..ec362cb1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java @@ -42,7 +42,6 @@ public enum UsCaField implements FieldKey { return type; } - // @formatter:off public static final FieldNames USCA_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsCaField.VERSION, @@ -57,10 +56,7 @@ public enum UsCaField implements FieldKey { UsCaField.MSPA_COVERED_TRANSACTION, UsCaField.MSPA_OPT_OUT_OPTION_MODE, UsCaField.MSPA_SERVICE_PROVIDER_MODE); - // @formatter:on - // @formatter:off public static final FieldNames USCA_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>(UsCaField.GPC_SEGMENT_TYPE, UsCaField.GPC_SEGMENT_INCLUDED, UsCaField.GPC); - // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java index bb796d6f..4c0b6856 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java @@ -42,7 +42,6 @@ public enum UsCoField implements FieldKey { return type; } - // @formatter:off public static final FieldNames USCO_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsCoField.VERSION, @@ -56,10 +55,7 @@ public enum UsCoField implements FieldKey { UsCoField.MSPA_COVERED_TRANSACTION, UsCoField.MSPA_OPT_OUT_OPTION_MODE, UsCoField.MSPA_SERVICE_PROVIDER_MODE); - // @formatter:on - // @formatter:off public static final FieldNames USCO_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>(UsCoField.GPC_SEGMENT_TYPE, UsCoField.GPC_SEGMENT_INCLUDED, UsCoField.GPC); - // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java index 58fbdbae..b601a6d9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java @@ -42,7 +42,6 @@ public enum UsCtField implements FieldKey { return type; } - // @formatter:off public static final FieldNames USCT_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsCtField.VERSION, @@ -56,10 +55,7 @@ public enum UsCtField implements FieldKey { UsCtField.MSPA_COVERED_TRANSACTION, UsCtField.MSPA_OPT_OUT_OPTION_MODE, UsCtField.MSPA_SERVICE_PROVIDER_MODE); - // @formatter:on - // @formatter:off public static final FieldNames USCT_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>(UsCtField.GPC_SEGMENT_TYPE, UsCtField.GPC_SEGMENT_INCLUDED, UsCtField.GPC); - // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java index c6ed86c7..addd25db 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java @@ -44,7 +44,6 @@ public enum UsDeField implements FieldKey { return type; } - // @formatter:off public static final FieldNames USDE_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsDeField.VERSION, @@ -59,10 +58,7 @@ public enum UsDeField implements FieldKey { UsDeField.MSPA_COVERED_TRANSACTION, UsDeField.MSPA_OPT_OUT_OPTION_MODE, UsDeField.MSPA_SERVICE_PROVIDER_MODE); - // @formatter:on - // @formatter:off public static final FieldNames USDE_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>(UsDeField.GPC_SEGMENT_TYPE, UsDeField.GPC_SEGMENT_INCLUDED, UsDeField.GPC); - // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java index 3f45ecae..6edaec57 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java @@ -38,7 +38,6 @@ public enum UsFlField implements FieldKey { return type; } - // @formatter:off public static final FieldNames USFL_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsFlField.VERSION, @@ -53,5 +52,4 @@ public enum UsFlField implements FieldKey { UsFlField.MSPA_COVERED_TRANSACTION, UsFlField.MSPA_OPT_OUT_OPTION_MODE, UsFlField.MSPA_SERVICE_PROVIDER_MODE); - // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java index b0d655cc..2936a09d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java @@ -44,7 +44,6 @@ public enum UsIaField implements FieldKey { return type; } - // @formatter:off public static final FieldNames USIA_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsIaField.VERSION, @@ -59,10 +58,7 @@ public enum UsIaField implements FieldKey { UsIaField.MSPA_COVERED_TRANSACTION, UsIaField.MSPA_OPT_OUT_OPTION_MODE, UsIaField.MSPA_SERVICE_PROVIDER_MODE); - // @formatter:on - // @formatter:off public static final FieldNames USIA_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>(UsIaField.GPC_SEGMENT_TYPE, UsIaField.GPC_SEGMENT_INCLUDED, UsIaField.GPC); - // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java index 6fda2f30..df7d4f4a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java @@ -44,7 +44,6 @@ public enum UsMtField implements FieldKey { return type; } - // @formatter:off public static final FieldNames USMT_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsMtField.VERSION, @@ -59,10 +58,7 @@ public enum UsMtField implements FieldKey { UsMtField.MSPA_COVERED_TRANSACTION, UsMtField.MSPA_OPT_OUT_OPTION_MODE, UsMtField.MSPA_SERVICE_PROVIDER_MODE); - // @formatter:on - // @formatter:off public static FieldNames USMT_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>(UsMtField.GPC_SEGMENT_TYPE, UsMtField.GPC_SEGMENT_INCLUDED, UsMtField.GPC); - // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java index 3c6fd6d2..b47410e5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java @@ -49,7 +49,6 @@ public enum UsNatField implements FieldKey { return type; } - // @formatter:off public static final FieldNames USNAT_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsNatField.VERSION, @@ -68,11 +67,8 @@ public enum UsNatField implements FieldKey { UsNatField.MSPA_COVERED_TRANSACTION, UsNatField.MSPA_OPT_OUT_OPTION_MODE, UsNatField.MSPA_SERVICE_PROVIDER_MODE); - // @formatter:on - // @formatter:off public static final FieldNames USNAT_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>( UsNatField.GPC_SEGMENT_TYPE, UsNatField.GPC_SEGMENT_INCLUDED, UsNatField.GPC); - // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java index 069de8c2..909a1535 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java @@ -44,7 +44,6 @@ public enum UsNeField implements FieldKey { return type; } - // @formatter:off public static final FieldNames USNE_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsNeField.VERSION, @@ -59,10 +58,7 @@ public enum UsNeField implements FieldKey { UsNeField.MSPA_COVERED_TRANSACTION, UsNeField.MSPA_OPT_OUT_OPTION_MODE, UsNeField.MSPA_SERVICE_PROVIDER_MODE); - // @formatter:on - // @formatter:off public static final FieldNames USNE_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>(UsNeField.GPC_SEGMENT_TYPE, UsNeField.GPC_SEGMENT_INCLUDED, UsNeField.GPC); - // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java index d0e41067..77f19359 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java @@ -44,7 +44,6 @@ public enum UsNhField implements FieldKey { return type; } - // @formatter:off public static final FieldNames USNH_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsNhField.VERSION, @@ -59,10 +58,7 @@ public enum UsNhField implements FieldKey { UsNhField.MSPA_COVERED_TRANSACTION, UsNhField.MSPA_OPT_OUT_OPTION_MODE, UsNhField.MSPA_SERVICE_PROVIDER_MODE); - // @formatter:on - // @formatter:off public static final FieldNames USNH_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>(UsNhField.GPC_SEGMENT_TYPE, UsNhField.GPC_SEGMENT_INCLUDED, UsNhField.GPC); - // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java index b1dc6d64..1af14b6d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java @@ -44,7 +44,6 @@ public enum UsNjField implements FieldKey { return type; } - // @formatter:off public static final FieldNames USNJ_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsNjField.VERSION, @@ -59,10 +58,7 @@ public enum UsNjField implements FieldKey { UsNjField.MSPA_COVERED_TRANSACTION, UsNjField.MSPA_OPT_OUT_OPTION_MODE, UsNjField.MSPA_SERVICE_PROVIDER_MODE); - // @formatter:on - // @formatter:off public static final FieldNames USNJ_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>(UsNjField.GPC_SEGMENT_TYPE, UsNjField.GPC_SEGMENT_INCLUDED, UsNjField.GPC); - // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java index a8a016fb..b030e519 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java @@ -44,7 +44,6 @@ public enum UsOrField implements FieldKey { return type; } - // @formatter:off public static final FieldNames USOR_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsOrField.VERSION, @@ -59,10 +58,7 @@ public enum UsOrField implements FieldKey { UsOrField.MSPA_COVERED_TRANSACTION, UsOrField.MSPA_OPT_OUT_OPTION_MODE, UsOrField.MSPA_SERVICE_PROVIDER_MODE); - // @formatter:on - // @formatter:off public static final FieldNames USOR_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>(UsOrField.GPC_SEGMENT_TYPE, UsOrField.GPC_SEGMENT_INCLUDED, UsOrField.GPC); - // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java index bc7c29d7..c62bd765 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java @@ -44,7 +44,6 @@ public enum UsTnField implements FieldKey { return type; } - // @formatter:off public static final FieldNames USTN_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsTnField.VERSION, @@ -59,10 +58,7 @@ public enum UsTnField implements FieldKey { UsTnField.MSPA_COVERED_TRANSACTION, UsTnField.MSPA_OPT_OUT_OPTION_MODE, UsTnField.MSPA_SERVICE_PROVIDER_MODE); - // @formatter:on - // @formatter:off public static final FieldNames USTN_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>(UsTnField.GPC_SEGMENT_TYPE, UsTnField.GPC_SEGMENT_INCLUDED, UsTnField.GPC); - // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java index abcd9b58..227e97d8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java @@ -44,7 +44,6 @@ public enum UsTxField implements FieldKey { return type; } - // @formatter:off public static final FieldNames USTX_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsTxField.VERSION, @@ -59,10 +58,7 @@ public enum UsTxField implements FieldKey { UsTxField.MSPA_COVERED_TRANSACTION, UsTxField.MSPA_OPT_OUT_OPTION_MODE, UsTxField.MSPA_SERVICE_PROVIDER_MODE); - // @formatter:on - // @formatter:off public static FieldNames USTX_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>(UsTxField.GPC_SEGMENT_TYPE, UsTxField.GPC_SEGMENT_INCLUDED, UsTxField.GPC); - // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java index 8b583cca..bc66fe8b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java @@ -38,7 +38,6 @@ public enum UsUtField implements FieldKey { return type; } - // @formatter:off public static final FieldNames USUT_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsUtField.VERSION, @@ -53,5 +52,4 @@ public enum UsUtField implements FieldKey { UsUtField.MSPA_COVERED_TRANSACTION, UsUtField.MSPA_OPT_OUT_OPTION_MODE, UsUtField.MSPA_SERVICE_PROVIDER_MODE); - // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java index 057ed29f..459e45e8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java @@ -36,7 +36,6 @@ public enum UsVaField implements FieldKey { return type; } - // @formatter:off public static final FieldNames USVA_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsVaField.VERSION, @@ -50,5 +49,4 @@ public enum UsVaField implements FieldKey { UsVaField.MSPA_COVERED_TRANSACTION, UsVaField.MSPA_OPT_OUT_OPTION_MODE, UsVaField.MSPA_SERVICE_PROVIDER_MODE); - // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java index 4f584830..0888b876 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java @@ -24,9 +24,7 @@ public enum UspV1Field implements FieldKey { return type; } - // @formatter:off public static final FieldNames USPV1_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UspV1Field.VERSION, UspV1Field.NOTICE, UspV1Field.OPT_OUT_SALE, UspV1Field.LSPA_COVERED); - // @formatter:on } From d3aca8517cc6627913660e903bdd40da60a06b63 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Thu, 19 Feb 2026 11:46:23 -0500 Subject: [PATCH 83/86] lazy slicing --- .../iab/gpp/encoder/section/SlicedCharSequence.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/SlicedCharSequence.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/SlicedCharSequence.java index 33d62b76..b881e885 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/SlicedCharSequence.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/SlicedCharSequence.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.section; import java.util.ArrayList; +import java.util.Collections; import java.util.List; public final class SlicedCharSequence implements CharSequence { @@ -35,13 +36,19 @@ public static List split(CharSequence charSequence, char splitter) start = 0; end = base.length(); } - // most sections/segments have less than 4 components - List out = new ArrayList<>(4); + List out = null; int next = 0; while ((next = base.indexOf(splitter, start, end)) != -1) { + if (out == null) { + // most sections/segments have less than 4 components + out = new ArrayList<>(4); + } out.add(new SlicedCharSequence(base, start, next)); start = next + 1; } + if (out == null) { + return Collections.singletonList(charSequence); + } out.add(new SlicedCharSequence(base, start, end)); return out; } From db1c6a169ddec884de947b596a8ecf168ab17dce Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Thu, 19 Feb 2026 13:25:46 -0500 Subject: [PATCH 84/86] add mn --- README.md | 159 +--------------- .../java/com/iab/gpp/encoder/GppModel.java | 6 + .../com/iab/gpp/encoder/field/UsMnField.java | 64 +++++++ .../com/iab/gpp/encoder/section/UsMn.java | 97 ++++++++++ .../com/iab/gpp/encoder/GppModelTest.java | 9 +- .../com/iab/gpp/encoder/section/UsMnTest.java | 174 ++++++++++++++++++ 6 files changed, 354 insertions(+), 155 deletions(-) create mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMnField.java create mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMn.java create mode 100644 iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsMnTest.java diff --git a/README.md b/README.md index b4c3ee2b..ff5e524b 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ The official iabgpp java library is distributed through maven central. Please [s #### Decoding -``` +```xml com.iabgpp iabgpp-encoder @@ -37,7 +37,7 @@ Integer uspV1Notice = uspV1Section.getNotice(); #### Encoding -``` +```xml com.iabgpp iabgpp-encoder @@ -45,7 +45,7 @@ Integer uspV1Notice = uspV1Section.getNotice(); ``` -``` +```java import com.iab.gpp.encoder.GppModel; import com.iab.gpp.encoder.section.TcfEuV2; import com.iab.gpp.encoder.section.UspV1; @@ -76,7 +76,7 @@ String gppString = gppModel.encode(); The `iabgpp-extras` and `iabgpp-extras-jackson` libraries provides an interface and ability to parse the GVL and CMP List respectively. The `iabgpp-extras-jackson` library uses Jackson 2.10.3 to parse the GVL and CMP List JSON. -``` +```xml com.iabgpp iabgpp-extras @@ -93,7 +93,7 @@ List respectively. The `iabgpp-extras-jackson` library uses Jackson 2.10.3 to pa Example of parsing the GVL, -``` +```java import com.iab.gpp.extras.jackson.Loader; import com.iab.gpp.extras.gvl.Gvl; @@ -104,7 +104,7 @@ Gvl gvl = loader.globalVendorList(gvlContent); Example of parsing the CMP List, -``` +```java import com.iab.gpp.extras.jackson.Loader; import com.iab.gpp.extras.cmp.CmpList; @@ -113,153 +113,6 @@ Loader loader = new Loader(); CmpList cmpList = loader.cmpList(cmpListContent); ``` -### Fields - -|Section Name|Section ID|Field|Data Type/Value| -|------------|----------|-----|---------------| -|tcfeuv2|2|Version|6 bit int. Value is 2.| -|tcfeuv2|2|Created|Datetime. Updated when fields are set| -|tcfeuv2|2|LastUpdated|Datetime. Updated when fields are set| -|tcfeuv2|2|CmpId|12 bit int| -|tcfeuv2|2|CmpVersion|12 bit int| -|tcfeuv2|2|ConsentScreen|6 bit int| -|tcfeuv2|2|ConsentLanguage|2 character country code| -|tcfeuv2|2|VendorListVersion|12 bit int| -|tcfeuv2|2|PolicyVersion|6 bit int. Value is 2| -|tcfeuv2|2|IsServiceSpecific|Boolean| -|tcfeuv2|2|UseNonStandardStacks|Boolean| -|tcfeuv2|2|SpecialFeatureOptins|Boolean list of size 12| -|tcfeuv2|2|PurposeConsents|Boolean list of size 24| -|tcfeuv2|2|PurposeLegitimateInterests|Boolean list of size 24| -|tcfeuv2|2|PurposeOneTreatment|Boolean| -|tcfeuv2|2|PublisherCountryCode|2 character country code| -|tcfeuv2|2|VendorConsents|Integer list of variable size| -|tcfeuv2|2|VendorLegitimateInterests|Integer list of variable size| -|tcfeuv2|2|PublisherRestrictions|Integer list of variable size| -|tcfeuv2|2|PublisherPurposesSegmentType|3 bit int. Value is 3| -|tcfeuv2|2|PublisherConsents|Boolean list of size 24| -|tcfeuv2|2|PublisherLegitimateInterests|Boolean list of size 24| -|tcfeuv2|2|NumCustomPurposes|6 bit int| -|tcfeuv2|2|PublisherCustomConsents|Boolean list where size is set by the NumCustomPurposes field| -|tcfeuv2|2|PublisherCustomLegitimateInterests|Boolean list where size is set by the NumCustomPurposes field| -|tcfeuv2|2|VendorsAllowedSegmentType|3 bit int. Value is 2| -|tcfeuv2|2|VendorsAllowed|Integer list of variable size| -|tcfeuv2|2|VendorsDisclosedSegmentType|3 bit int. Value is 1| -|tcfeuv2|2|VendorsDisclosed|Integer list of variable size| -|tcfcav1|5|Version|6 bit int. Value is 2.| -|tcfcav1|5|Created|Datetime. Updated when any fields are set| -|tcfcav1|5|LastUpdated|Datetime. Updated when any fields are set| -|tcfcav1|5|CmpId|12 bit int| -|tcfcav1|5|CmpVersion|12 bit int| -|tcfcav1|5|ConsentScreen|6 bit int| -|tcfcav1|5|ConsentLanguage|2 character country code| -|tcfcav1|5|VendorListVersion|12 bit int| -|tcfcav1|5|TcfPolicyVersion|6 bit int. Value is 2.| -|tcfcav1|5|UseNonStandardStacks|Boolean| -|tcfcav1|5|SpecialFeatureExpressConsent|Boolean list of size 12| -|tcfcav1|5|PurposesExpressConsent|Boolean list of size 24| -|tcfcav1|5|PurposesImpliedConsent|Boolean list of size 24| -|tcfcav1|5|VendorExpressConsent|Integer list of variable size| -|tcfcav1|5|VendorImpliedConsent|Integer list of variable size| -|tcfcav1|5|PubRestrictions|RangeEntry list of variable size| -|tcfcav1|5|PubPurposesSegmentType|3 bit int. Value is 3| -|tcfcav1|5|PubPurposesExpressConsent|Boolean list of size 24| -|tcfcav1|5|PubPurposesImpliedConsent|Boolean list of size 24| -|tcfcav1|5|NumCustomPurposes|6 bit int| -|tcfcav1|5|CustomPurposesExpressConsent|Boolean list where size is set by the NumCustomPurposes field| -|tcfcav1|5|CustomPurposesImpliedConsent|Boolean list where size is set by the NumCustomPurposes field| -|tcfcav1|5|DisclosedVendorsSegmentType|3 bit int. Value is 1| -|tcfcav1|5|DisclosedVendors|Integer list of variable size| -|uspv1|6|Version|6 bit int. Value is 1| -|uspv1|6|Notice|2 bit int| -|uspv1|6|OptOutSale|2 bit int| -|uspv1|6|LspaCovered|2 bit int| -|usnat|7|Version|6 bit int. Value is 1| -|usnat|7|SharingNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usnat|7|SaleOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usnat|7|SharingOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usnat|7|TargetedAdvertisingOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usnat|7|SensitiveDataProcessingOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usnat|7|SensitiveDataLimitUseNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usnat|7|SaleOptOut|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usnat|7|SharingOptOut|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usnat|7|TargetedAdvertisingOptOut|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usnat|7|SensitiveDataProcessing|2 bit int list of size 12. 0=Not applicable, 1=Yes, 2=No| -|usnat|7|KnownChildSensitiveDataConsents|2 bit int list of size 2. 0=Not applicable, 1=Yes, 2=No| -|usnat|7|PersonalDataConsents|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usnat|7|MspaCoveredTransaction|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usnat|7|MspaOptOutOptionMode|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usnat|7|MspaServiceProviderMode|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usnat|7|GpcSegmentType|2 bit int. Value is 1| -|usnat|7|GpcSegmentIncluded|Boolean. Default value is true| -|usnat|7|Gpc|Boolean| -|usca|8|Version|6 bit int. Value is 1| -|usca|8|SaleOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usca|8|SharingOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usca|8|SensitiveDataLimitUseNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usca|8|SaleOptOut|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usca|8|SharingOptOut|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usca|8|SensitiveDataProcessing|2 bit int list of size 9. 0=Not applicable, 1=Yes, 2=No| -|usca|8|KnownChildSensitiveDataConsents|2 bit int list of size 2. 0=Not applicable, 1=Yes, 2=No| -|usca|8|PersonalDataConsents|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usca|8|MspaCoveredTransaction|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usca|8|MspaOptOutOptionMode|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usca|8|MspaServiceProviderMode|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usca|8|GpcSegmentType|2 bit int. Value is 1| -|usca|8|GpcSegmentIncluded|Boolean. Default value is true| -|usca|8|Gpc|Boolean| -|usva|9|Version|6 bit int. Value is 1| -|usva|9|SharingNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usva|9|SaleOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usva|9|TargetedAdvertisingOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usva|9|SaleOptOut|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usva|9|TargetedAdvertisingOptOut|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usva|9|SensitiveDataProcessing|2 bit int list of size 8. 0=Not applicable, 1=Yes, 2=No| -|usva|9|KnownChildSensitiveDataConsents|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usva|9|MspaCoveredTransaction|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usva|9|MspaOptOutOptionMode|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usva|9|MspaServiceProviderMode|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usco|10|Version|6 bit int. Value is 1| -|usco|10|SharingNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usco|10|SaleOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usco|10|TargetedAdvertisingOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usco|10|SaleOptOut|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usco|10|TargetedAdvertisingOptOut|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usco|10|SensitiveDataProcessing|2 bit int list of size 7. 0=Not applicable, 1=Yes, 2=No| -|usco|10|KnownChildSensitiveDataConsents|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usco|10|MspaCoveredTransaction|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usco|10|MspaOptOutOptionMode|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usco|10|MspaServiceProviderMode|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usco|10|GpcSegmentType|2 bit int. Value is 1| -|usco|10|GpcSegmentIncluded|Boolean. Default value is true| -|usco|10|Gpc|Boolean| -|usut|11|Version|6 bit int. Value is 1| -|usut|11|SharingNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usut|11|SaleOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usut|11|TargetedAdvertisingOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usut|11|SensitiveDataProcessingOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usut|11|SaleOptOut|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usut|11|TargetedAdvertisingOptOut|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usut|11|SensitiveDataProcessing|2 bit int list of size 8. 0=Not applicable, 1=Yes, 2=No| -|usut|11|KnownChildSensitiveDataConsents|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usut|11|MspaCoveredTransaction|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usut|11|MspaOptOutOptionMode|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usut|11|MspaServiceProviderMode|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usct|12|Version|6 bit int. Value is 1| -|usct|12|SharingNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usct|12|SaleOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usct|12|TargetedAdvertisingOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usct|12|SaleOptOut|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usct|12|TargetedAdvertisingOptOut|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usct|12|SensitiveDataProcessing|2 bit int list of size 8. 0=Not applicable, 1=Yes, 2=No| -|usct|12|KnownChildSensitiveDataConsents|2 bit int list of size 3. 0=Not applicable, 1=Yes, 2=No| -|usct|12|MspaCoveredTransaction|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usct|12|MspaOptOutOptionMode|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usct|12|MspaServiceProviderMode|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usct|12|GpcSegmentType|2 bit int. Value is 1| -|usct|12|GpcSegmentIncluded|Boolean. Default value is true| -|usct|12|Gpc|Boolean| - ## Contributing Here you can find the [contributing guide](CONTRIBUTING.md) to help maintain and update the library. This library is managed by the Code Libraries Subgroup of the Global Privacy Working Group at the IAB Tech Lab. To join the group, please reach out to support@iabtechlab.com. diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java index 7ab69f1c..0a2f2941 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java @@ -15,6 +15,7 @@ import com.iab.gpp.encoder.section.UsDe; import com.iab.gpp.encoder.section.UsFl; import com.iab.gpp.encoder.section.UsIa; +import com.iab.gpp.encoder.section.UsMn; import com.iab.gpp.encoder.section.UsMt; import com.iab.gpp.encoder.section.UsNat; import com.iab.gpp.encoder.section.UsNe; @@ -62,6 +63,7 @@ public class GppModel extends AbstractEncodable { constructors.add(UsNh::new); constructors.add(UsNj::new); constructors.add(UsTn::new); + constructors.add(UsMn::new); for (Supplier> constructor : constructors) { EncodableSection prototype = constructor.get(); @@ -257,6 +259,10 @@ public UsTn getUsTnSection() { return (UsTn) getSection(UsTn.ID); } + public UsMn getUsMnSection() { + return (UsMn) getSection(UsMn.ID); + } + public List getSectionIds() { ensureDecode(); return new ArrayList<>(header.getSectionsIds()); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMnField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMnField.java new file mode 100644 index 00000000..7c78b06e --- /dev/null +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMnField.java @@ -0,0 +1,64 @@ +package com.iab.gpp.encoder.field; + +import com.iab.gpp.encoder.datatype.DataType; +import com.iab.gpp.encoder.datatype.EncodableBoolean; +import com.iab.gpp.encoder.datatype.EncodableFixedInteger; +import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; +import com.iab.gpp.encoder.datatype.UnencodableBoolean; +import com.iab.gpp.encoder.section.UsMn; + +public enum UsMnField implements FieldKey { + VERSION(new EncodableFixedInteger<>("Version", 6, UsMn.VERSION)), + PROCESSING_NOTICE(new EncodableFixedInteger<>("ProcessingNotice", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT_NOTICE(new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT(new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), + TARGETED_ADVERTISING_OPT_OUT( + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), + SENSITIVE_DATA_PROCESSING( + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, VALIDATOR_LIST_012)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS( + new EncodableFixedInteger<>("KnownChildSensitiveDataConsents", 2, 0, VALIDATOR_012)), + ADDITIONAL_DATA_PROCESSING_CONSENT( + new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, VALIDATOR_012)), + MSPA_COVERED_TRANSACTION( + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, VALIDATOR_12)), + MSPA_OPT_OUT_OPTION_MODE( + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, VALIDATOR_012)), + MSPA_SERVICE_PROVIDER_MODE( + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, VALIDATOR_012)), + + GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), + GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), + GPC(new EncodableBoolean<>("Gpc", false)); + + private final DataType type; + + UsMnField(DataType type) { + this.type = type; + } + + @Override + public DataType getType() { + return type; + } + + public static final FieldNames USMN_CORE_SEGMENT_FIELD_NAMES = + new FieldNames<>( + UsMnField.VERSION, + UsMnField.PROCESSING_NOTICE, + UsMnField.SALE_OPT_OUT_NOTICE, + UsMnField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + UsMnField.SALE_OPT_OUT, + UsMnField.TARGETED_ADVERTISING_OPT_OUT, + UsMnField.SENSITIVE_DATA_PROCESSING, + UsMnField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + UsMnField.ADDITIONAL_DATA_PROCESSING_CONSENT, + UsMnField.MSPA_COVERED_TRANSACTION, + UsMnField.MSPA_OPT_OUT_OPTION_MODE, + UsMnField.MSPA_SERVICE_PROVIDER_MODE); + + public static final FieldNames USMN_GPC_SEGMENT_FIELD_NAMES = + new FieldNames<>(UsMnField.GPC_SEGMENT_TYPE, UsMnField.GPC_SEGMENT_INCLUDED, UsMnField.GPC); +} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMn.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMn.java new file mode 100644 index 00000000..6813c3a2 --- /dev/null +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMn.java @@ -0,0 +1,97 @@ +package com.iab.gpp.encoder.section; + +import com.iab.gpp.encoder.field.UsMnField; +import com.iab.gpp.encoder.segment.Base64Segment; +import java.util.List; + +public class UsMn extends AbstractUsSectionWithGpc { + + public static final int ID = 23; + public static final int VERSION = 1; + public static final String NAME = "usmn"; + + public UsMn() { + super( + new Base64Segment<>(UsMnField.USMN_CORE_SEGMENT_FIELD_NAMES), + new Base64Segment<>(UsMnField.USMN_GPC_SEGMENT_FIELD_NAMES)); + } + + public UsMn(String encodedString) { + this(); + decode(encodedString); + } + + @Override + public int getId() { + return UsMn.ID; + } + + @Override + public String getName() { + return UsMn.NAME; + } + + @Override + public int getVersion() { + return UsMn.VERSION; + } + + @Override + protected final UsMnField getGpcSegmentIncludedKey() { + return UsMnField.GPC_SEGMENT_INCLUDED; + } + + public Integer getProcessingNotice() { + return (Integer) this.getFieldValue(UsMnField.PROCESSING_NOTICE); + } + + public Integer getSaleOptOutNotice() { + return (Integer) this.getFieldValue(UsMnField.SALE_OPT_OUT_NOTICE); + } + + public Integer getTargetedAdvertisingOptOutNotice() { + return (Integer) this.getFieldValue(UsMnField.TARGETED_ADVERTISING_OPT_OUT_NOTICE); + } + + public Integer getSaleOptOut() { + return (Integer) this.getFieldValue(UsMnField.SALE_OPT_OUT); + } + + public Integer getTargetedAdvertisingOptOut() { + return (Integer) this.getFieldValue(UsMnField.TARGETED_ADVERTISING_OPT_OUT); + } + + @SuppressWarnings("unchecked") + public List getSensitiveDataProcessing() { + return (List) this.getFieldValue(UsMnField.SENSITIVE_DATA_PROCESSING); + } + + @SuppressWarnings("unchecked") + public Integer getKnownChildSensitiveDataConsents() { + return (Integer) this.getFieldValue(UsMnField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS); + } + + public Integer getAdditionalDataProcessingConsent() { + return (Integer) this.getFieldValue(UsMnField.ADDITIONAL_DATA_PROCESSING_CONSENT); + } + + public Integer getMspaCoveredTransaction() { + return (Integer) this.getFieldValue(UsMnField.MSPA_COVERED_TRANSACTION); + } + + public Integer getMspaOptOutOptionMode() { + return (Integer) this.getFieldValue(UsMnField.MSPA_OPT_OUT_OPTION_MODE); + } + + public Integer getMspaServiceProviderMode() { + return (Integer) this.getFieldValue(UsMnField.MSPA_SERVICE_PROVIDER_MODE); + } + + public Integer getGpcSegmentType() { + return (Integer) this.getFieldValue(UsMnField.GPC_SEGMENT_TYPE); + } + + public Boolean getGpc() { + return (Boolean) this.getFieldValue(UsMnField.GPC); + } +} diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java index e009c089..95832806 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java @@ -9,6 +9,7 @@ import com.iab.gpp.encoder.field.UsDeField; import com.iab.gpp.encoder.field.UsFlField; import com.iab.gpp.encoder.field.UsIaField; +import com.iab.gpp.encoder.field.UsMnField; import com.iab.gpp.encoder.field.UsMtField; import com.iab.gpp.encoder.field.UsNatField; import com.iab.gpp.encoder.field.UsNeField; @@ -28,6 +29,7 @@ import com.iab.gpp.encoder.section.UsDe; import com.iab.gpp.encoder.section.UsFl; import com.iab.gpp.encoder.section.UsIa; +import com.iab.gpp.encoder.section.UsMn; import com.iab.gpp.encoder.section.UsMt; import com.iab.gpp.encoder.section.UsNat; import com.iab.gpp.encoder.section.UsNe; @@ -125,6 +127,7 @@ public void testEncodeDefaultAll() { gppModel.setFieldValue(UsNh.NAME, UsNhField.VERSION, UsNh.VERSION); gppModel.setFieldValue(UsNj.NAME, UsNjField.VERSION, UsNj.VERSION); gppModel.setFieldValue(UsTn.NAME, UsTnField.VERSION, UsTn.VERSION); + gppModel.setFieldValue(UsMn.NAME, UsMnField.VERSION, UsMn.VERSION); Assertions.assertEquals(true, gppModel.hasSection(TcfEuV2.NAME)); Assertions.assertEquals(true, gppModel.hasSection(TcfCaV1.NAME)); @@ -145,10 +148,11 @@ public void testEncodeDefaultAll() { Assertions.assertEquals(true, gppModel.hasSection(UsNh.NAME)); Assertions.assertEquals(true, gppModel.hasSection(UsNj.NAME)); Assertions.assertEquals(true, gppModel.hasSection(UsTn.NAME)); + Assertions.assertEquals(true, gppModel.hasSection(UsMn.NAME)); String gppString = gppModel.encode(); Assertions.assertEquals( - "DBACOdM~CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAAAA.QAAA.IAAA~BPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAA.YAAAAAAAAAA~1---~BAAAAAAAAABA.QA~BAAAAABA.QA~BAAAABA~BAAAAEA.QA~BAAAAAQA~BAAAAAEA.QA~BAAAAABA~BAAAAABA.QA~BAAAAAABAA.QA~BAAAAAQA.QA~BAAAAAABAA.QA~BAAAAAQA.QA~BAAAAAQA.QA~BAAAAABA.QA~BAAAAAAAQA.QA~BAAAAAQA.QA", + "DBACOYs~CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAAAA.QAAA.IAAA~BPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAA.YAAAAAAAAAA~1---~BAAAAAAAAABA.QA~BAAAAABA.QA~BAAAABA~BAAAAEA.QA~BAAAAAQA~BAAAAAEA.QA~BAAAAABA~BAAAAABA.QA~BAAAAAABAA.QA~BAAAAAQA.QA~BAAAAAABAA.QA~BAAAAAQA.QA~BAAAAAQA.QA~BAAAAABA.QA~BAAAAAAAQA.QA~BAAAAAQA.QA~BAAAAAQA.QA", gppString); } @@ -424,7 +428,7 @@ public void testDecodeDefaults() { @Test public void testDecodeDefaultsAll() { String gppString = - "DBACOdM~CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAAAA.QAAA.IAAA~BPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAA.YAAAAAAAAAA~1---~BAAAAAAAAABA.QA~BAAAAABA.QA~BAAAABA~BAAAAEA.QA~BAAAAAQA~BAAAAAEA.QA~BAAAAABA~BAAAAABA.QA~BAAAAAABAA.QA~BAAAAAQA.QA~BAAAAAABAA.QA~BAAAAAQA.QA~BAAAAAQA.QA~BAAAAABA.QA~BAAAAAAAQA.QA~BAAAAAQA.QA"; + "DBACOYs~CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAAAA.QAAA.IAAA~BPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAA.YAAAAAAAAAA~1---~BAAAAAAAAABA.QA~BAAAAABA.QA~BAAAABA~BAAAAEA.QA~BAAAAAQA~BAAAAAEA.QA~BAAAAABA~BAAAAABA.QA~BAAAAAABAA.QA~BAAAAAQA.QA~BAAAAAABAA.QA~BAAAAAQA.QA~BAAAAAQA.QA~BAAAAABA.QA~BAAAAAAAQA.QA~BAAAAAQA.QA~BAAAAAABAA.QA"; GppModel gppModel = new GppModel(gppString); Assertions.assertEquals(true, gppModel.hasSection(TcfEuV2.NAME)); @@ -446,6 +450,7 @@ public void testDecodeDefaultsAll() { Assertions.assertEquals(true, gppModel.hasSection(UsNh.NAME)); Assertions.assertEquals(true, gppModel.hasSection(UsNj.NAME)); Assertions.assertEquals(true, gppModel.hasSection(UsTn.NAME)); + Assertions.assertEquals(true, gppModel.hasSection(UsMn.NAME)); } @Test diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsMnTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsMnTest.java new file mode 100644 index 00000000..02506a39 --- /dev/null +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsMnTest.java @@ -0,0 +1,174 @@ +package com.iab.gpp.encoder.section; + +import com.iab.gpp.encoder.error.DecodingException; +import com.iab.gpp.encoder.error.ValidationException; +import com.iab.gpp.encoder.field.UsMnField; +import java.util.Arrays; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class UsMnTest { + + @Test + public void testEncode1() { + UsMn usMn = new UsMn(); + Assertions.assertEquals("BAAAAAQA.QA", usMn.encode()); + } + + @Test + public void testEncode2() { + UsMn usMn = new UsMn(); + + usMn.setFieldValue(UsMnField.PROCESSING_NOTICE, 1); + usMn.setFieldValue(UsMnField.SALE_OPT_OUT_NOTICE, 1); + usMn.setFieldValue(UsMnField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, 1); + usMn.setFieldValue(UsMnField.SALE_OPT_OUT, 1); + usMn.setFieldValue(UsMnField.TARGETED_ADVERTISING_OPT_OUT, 1); + usMn.setFieldValue(UsMnField.SENSITIVE_DATA_PROCESSING, Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1)); + usMn.setFieldValue(UsMnField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, 1); + usMn.setFieldValue(UsMnField.ADDITIONAL_DATA_PROCESSING_CONSENT, 1); + usMn.setFieldValue(UsMnField.MSPA_COVERED_TRANSACTION, 1); + usMn.setFieldValue(UsMnField.MSPA_OPT_OUT_OPTION_MODE, 1); + usMn.setFieldValue(UsMnField.MSPA_SERVICE_PROVIDER_MODE, 2); + usMn.setFieldValue(UsMnField.GPC, true); + + Assertions.assertEquals("BVWSSVWA.YA", usMn.encode()); + } + + @Test + public void testSetInvalidValues() { + UsMn usMn = new UsMn(); + + try { + usMn.setFieldValue(UsMnField.PROCESSING_NOTICE, 3); + Assertions.fail("Expected ValidationException"); + } catch (ValidationException e) { + + } + + try { + usMn.setFieldValue(UsMnField.SALE_OPT_OUT_NOTICE, 3); + Assertions.fail("Expected ValidationException"); + } catch (ValidationException e) { + + } + + try { + usMn.setFieldValue(UsMnField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, 3); + Assertions.fail("Expected ValidationException"); + } catch (ValidationException e) { + + } + + try { + usMn.setFieldValue(UsMnField.SALE_OPT_OUT, 3); + Assertions.fail("Expected ValidationException"); + } catch (ValidationException e) { + + } + + try { + usMn.setFieldValue(UsMnField.TARGETED_ADVERTISING_OPT_OUT, -1); + Assertions.fail("Expected ValidationException"); + } catch (ValidationException e) { + + } + + try { + usMn.setFieldValue( + UsMnField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 1, 2, 0, 1)); + Assertions.fail("Expected ValidationException"); + } catch (ValidationException e) { + + } + + try { + usMn.setFieldValue(UsMnField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, 3); + Assertions.fail("Expected ValidationException"); + } catch (ValidationException e) { + + } + + try { + usMn.setFieldValue(UsMnField.ADDITIONAL_DATA_PROCESSING_CONSENT, 3); + Assertions.fail("Expected ValidationException"); + } catch (ValidationException e) { + + } + + try { + usMn.setFieldValue(UsMnField.MSPA_COVERED_TRANSACTION, 0); + Assertions.fail("Expected ValidationException"); + } catch (ValidationException e) { + + } + + try { + usMn.setFieldValue(UsMnField.MSPA_OPT_OUT_OPTION_MODE, 4); + Assertions.fail("Expected ValidationException"); + } catch (ValidationException e) { + + } + + try { + usMn.setFieldValue(UsMnField.MSPA_SERVICE_PROVIDER_MODE, -1); + Assertions.fail("Expected ValidationException"); + } catch (ValidationException e) { + + } + } + + @Test + public void testEncodeWithGpcSegmentExcluded() { + UsMn usMn = new UsMn(); + usMn.setFieldValue(UsMnField.GPC_SEGMENT_INCLUDED, false); + Assertions.assertEquals("BAAAAAQA", usMn.encode()); + } + + @Test + public void testDecode1() throws DecodingException { + UsMn usMn = new UsMn("BVWSSVWA.YA"); + + Assertions.assertEquals(1, usMn.getProcessingNotice()); + Assertions.assertEquals(1, usMn.getSaleOptOutNotice()); + Assertions.assertEquals(1, usMn.getTargetedAdvertisingOptOutNotice()); + Assertions.assertEquals(1, usMn.getSaleOptOut()); + Assertions.assertEquals(1, usMn.getTargetedAdvertisingOptOut()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usMn.getSensitiveDataProcessing()); + Assertions.assertEquals(1, usMn.getKnownChildSensitiveDataConsents()); + Assertions.assertEquals(1, usMn.getAdditionalDataProcessingConsent()); + Assertions.assertEquals(1, usMn.getMspaCoveredTransaction()); + Assertions.assertEquals(1, usMn.getMspaOptOutOptionMode()); + Assertions.assertEquals(2, usMn.getMspaServiceProviderMode()); + Assertions.assertEquals(true, usMn.getGpc()); + } + + @Test + public void testDecodeWithGpcSegmentExcluded() throws DecodingException { + UsMn usMn = new UsMn("BVWSSVWA"); + + Assertions.assertEquals(1, usMn.getProcessingNotice()); + Assertions.assertEquals(1, usMn.getSaleOptOutNotice()); + Assertions.assertEquals(1, usMn.getTargetedAdvertisingOptOutNotice()); + Assertions.assertEquals(1, usMn.getSaleOptOut()); + Assertions.assertEquals(1, usMn.getTargetedAdvertisingOptOut()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usMn.getSensitiveDataProcessing()); + Assertions.assertEquals(1, usMn.getKnownChildSensitiveDataConsents()); + Assertions.assertEquals(1, usMn.getAdditionalDataProcessingConsent()); + Assertions.assertEquals(1, usMn.getMspaCoveredTransaction()); + Assertions.assertEquals(1, usMn.getMspaOptOutOptionMode()); + Assertions.assertEquals(2, usMn.getMspaServiceProviderMode()); + Assertions.assertEquals(false, usMn.getGpcSegmentIncluded()); + } + + @Test() + public void testDecodeGarbage() { + Assertions.assertThrows( + DecodingException.class, + () -> { + new UsMn("z").getProcessingNotice(); + }); + } +} From 7ecbbc7e5af1aac732a09fc1d0c637b2c80a71e7 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Thu, 19 Feb 2026 15:03:12 -0500 Subject: [PATCH 85/86] seamless support usnatv2 --- .../iab/gpp/encoder/bitstring/BitString.java | 18 +++++ .../com/iab/gpp/encoder/field/UsNatField.java | 81 ++++++++++++++++++- .../com/iab/gpp/encoder/section/UsNat.java | 4 +- .../encoder/segment/SegmentValueProvider.java | 2 +- .../gpp/encoder/segment/UsNatCoreSegment.java | 23 +++--- .../com/iab/gpp/encoder/GppModelTest.java | 10 +-- .../iab/gpp/encoder/section/UsNatTest.java | 33 ++++++-- 7 files changed, 142 insertions(+), 29 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java index cd56919f..f876bd04 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java @@ -149,6 +149,24 @@ public int readInt(int length) { return bitSet.readInt(from, to); } + // used for usnat v1 to v2 conversion, see note in UsNatCoreSegment + public int peekInt(int length) { + return bitSet.readInt(0, length); + } + + // used for usnat v1 to v2 conversion, see note in UsNatCoreSegment + public void putInt(int value, int length) { + int mask = 1 << length; + if (value >= mask) { + throw new EncodingException( + "Numeric value '" + value + "' is too large for a bit string length of '" + length + "'"); + } + for (int i = 0; i < length; i++) { + mask >>= 1; + bitSet.set(i, (mask & value) != 0); + } + } + public long readLong(int length) { int from = readIndex; int to = from + length; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java index b47410e5..3826d034 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java @@ -1,11 +1,18 @@ package com.iab.gpp.encoder.field; +import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.datatype.AbstractDirtyableBitStringDataType; import com.iab.gpp.encoder.datatype.DataType; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; +import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.datatype.UnencodableBoolean; +import com.iab.gpp.encoder.datatype.encoder.FixedIntegerListEncoder; import com.iab.gpp.encoder.section.UsNat; +import com.iab.gpp.encoder.segment.EncodableSegment; +import com.iab.gpp.encoder.segment.SegmentValueProvider; +import java.util.List; +import java.util.function.Predicate; public enum UsNatField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsNat.VERSION)), @@ -23,9 +30,14 @@ public enum UsNatField implements FieldKey { TARGETED_ADVERTISING_OPT_OUT( new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( - new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 16, VALIDATOR_LIST_012)), + new EncodableFlexibleIntegerList( + "SensitiveDataProcessing", 2, new VersionedLengthProvider(12, 16), VALIDATOR_LIST_012)), KNOWN_CHILD_SENSITIVE_DATA_CONSENTS( - new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, VALIDATOR_LIST_012)), + new EncodableFlexibleIntegerList( + "KnownChildSensitiveDataConsents", + 2, + new VersionedLengthProvider(2, 3), + VALIDATOR_LIST_012)), PERSONAL_DATA_CONSENTS(new EncodableFixedInteger<>("PersonalDataConsents", 2, 0, VALIDATOR_012)), MSPA_COVERED_TRANSACTION( new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, VALIDATOR_12)), @@ -71,4 +83,67 @@ public enum UsNatField implements FieldKey { public static final FieldNames USNAT_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>( UsNatField.GPC_SEGMENT_TYPE, UsNatField.GPC_SEGMENT_INCLUDED, UsNatField.GPC); + + // used for usnat v1 to v2 conversion, see note in UsNatCoreSegment + private static final class EncodableFlexibleIntegerList + extends AbstractDirtyableBitStringDataType { + + private final int elementBitStringLength; + private final VersionedLengthProvider lengthProvider; + + public EncodableFlexibleIntegerList( + String name, + int elementBitStringLength, + VersionedLengthProvider lengthProvider, + Predicate validator) { + super(name, validator); + this.elementBitStringLength = elementBitStringLength; + + this.lengthProvider = lengthProvider; + } + + @Override + protected FixedIntegerList initialize() { + return new FixedIntegerList(elementBitStringLength, lengthProvider.v2Length); + } + + @Override + protected void encode( + BitString builder, FixedIntegerList value, EncodableSegment segment) { + FixedIntegerListEncoder.encode( + builder, value, this.elementBitStringLength, lengthProvider.extract(segment)); + } + + @Override + protected FixedIntegerList decode(BitString reader, EncodableSegment segment) { + return reader.readFixedIntegerList(elementBitStringLength, lengthProvider.extract(segment)); + } + + @SuppressWarnings("unchecked") + @Override + protected FixedIntegerList processValue(FixedIntegerList oldValue, Object newValue) { + List list = (List) newValue; + int size = list.size(); + for (int i = 0; i < oldValue.size(); i++) { + oldValue.set(i, i < size ? list.get(i) : 0); + } + return oldValue; + } + } + + private static final class VersionedLengthProvider extends SegmentValueProvider { + + private final int v1Length; + private final int v2Length; + + public VersionedLengthProvider(int v1Length, int v2Length) { + super(UsNatField.VERSION); + this.v1Length = v1Length; + this.v2Length = v2Length; + } + + public int modify(int original) { + return original == 1 ? v1Length : v2Length; + } + } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java index 19de1529..e6f07b17 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java @@ -8,7 +8,7 @@ public class UsNat extends AbstractUsSectionWithGpc { public static final int ID = 7; - public static final int VERSION = 1; + public static final int VERSION = 2; public static final String NAME = "usnat"; public UsNat() { @@ -33,7 +33,7 @@ public String getName() { @Override public int getVersion() { - return UsNat.VERSION; + return (Integer) this.getFieldValue(UsNatField.VERSION); } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/SegmentValueProvider.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/SegmentValueProvider.java index dc5368a6..fca1bae7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/SegmentValueProvider.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/SegmentValueProvider.java @@ -14,6 +14,6 @@ public int modify(int original) { } public final int extract(EncodableSegment segment) { - return (Integer) segment.getFieldValueUnsafe(key); + return modify((Integer) segment.getFieldValueUnsafe(key)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java index a57fe3d1..c69cb9f4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java @@ -1,36 +1,33 @@ package com.iab.gpp.encoder.segment; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; -import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; +import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.field.UsNatField; public final class UsNatCoreSegment extends AbstractBase64Segment { + private static final int VERSION_LENGTH = 6; + public UsNatCoreSegment() { super(UsNatField.USNAT_CORE_SEGMENT_FIELD_NAMES); } protected AbstractBase64UrlEncoder getBase64UrlEncoder() { - return TraditionalBase64UrlEncoder.getInstance(); + return CompressedBase64UrlEncoder.getInstance(); } @Override protected BitString decodeBitString(CharSequence encodedString) { BitString bitString = super.decodeBitString(encodedString); + // An encoder implemented the v2 spec (more fields) while still sending the version as 1. // Necessary to maintain backwards compatibility when sensitive data processing changed from a // length of 12 to 16 and known child sensitive data consents changed from a length of 2 to 3 in - // the - // DE, IA, NE, NH, NJ, TN release - if (bitString.length() == 66) { - BitString builder = new BitString(); - - builder.write(bitString, 0, 48); - builder.writeEmpty(8); - builder.write(bitString, 48, 52); - builder.writeEmpty(2); - builder.write(bitString, 52, 62); - bitString = builder; + // the DE, IA, NE, NH, NJ, TN release. + // We use a heuristic of length to determine the v2 strings masquerading as v1 string. + if (bitString.peekInt(VERSION_LENGTH) == 1 && bitString.length() >= 72) { + // Upgrade to version 2 + bitString.putInt(2, VERSION_LENGTH); } return bitString; } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java index e009c089..4d45c4fe 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java @@ -148,7 +148,7 @@ public void testEncodeDefaultAll() { String gppString = gppModel.encode(); Assertions.assertEquals( - "DBACOdM~CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAAAA.QAAA.IAAA~BPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAA.YAAAAAAAAAA~1---~BAAAAAAAAABA.QA~BAAAAABA.QA~BAAAABA~BAAAAEA.QA~BAAAAAQA~BAAAAAEA.QA~BAAAAABA~BAAAAABA.QA~BAAAAAABAA.QA~BAAAAAQA.QA~BAAAAAABAA.QA~BAAAAAQA.QA~BAAAAAQA.QA~BAAAAABA.QA~BAAAAAAAQA.QA~BAAAAAQA.QA", + "DBACOdM~CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAAAA.QAAA.IAAA~BPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAA.YAAAAAAAAAA~1---~CAAAAAAAAABA.QA~BAAAAABA.QA~BAAAABA~BAAAAEA.QA~BAAAAAQA~BAAAAAEA.QA~BAAAAABA~BAAAAABA.QA~BAAAAAABAA.QA~BAAAAAQA.QA~BAAAAAABAA.QA~BAAAAAQA.QA~BAAAAAQA.QA~BAAAAABA.QA~BAAAAAAAQA.QA~BAAAAAQA.QA", gppString); } @@ -771,10 +771,10 @@ public void testDecode6() { GppModel gppModel = new GppModel("DBABLA~BAAAAAAAAQA.QA"); gppModel.getFieldValue(UsNat.NAME, UsNatField.VERSION); Assertions.assertEquals( - Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), + Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), gppModel.getFieldValue(UsNat.NAME, UsNatField.SENSITIVE_DATA_PROCESSING)); Assertions.assertEquals( - Arrays.asList(0, 0, 0), + Arrays.asList(0, 0), gppModel.getFieldValue(UsNat.NAME, UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS)); } @@ -795,10 +795,10 @@ public void testDecode8() { GppModel gppModel = new GppModel("DBABLA~BAAAAAABEQA.QA"); gppModel.getFieldValue(UsNat.NAME, UsNatField.VERSION); Assertions.assertEquals( - Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0), + Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1), gppModel.getFieldValue(UsNat.NAME, UsNatField.SENSITIVE_DATA_PROCESSING)); Assertions.assertEquals( - Arrays.asList(0, 1, 0), + Arrays.asList(0, 1), gppModel.getFieldValue(UsNat.NAME, UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS)); } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNatTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNatTest.java index ec549ad4..d5357886 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNatTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNatTest.java @@ -13,7 +13,7 @@ public class UsNatTest { public void testEncode1() { UsNat usNat = new UsNat(); - Assertions.assertEquals("BAAAAAAAAABA.QA", usNat.encode()); + Assertions.assertEquals("CAAAAAAAAABA.QA", usNat.encode()); } @Test @@ -39,7 +39,7 @@ public void testEncode2() { usNat.setFieldValue(UsNatField.MSPA_SERVICE_PROVIDER_MODE, 2); usNat.setFieldValue(UsNatField.GPC, true); - Assertions.assertEquals("BVVVkkkkkpFY.YA", usNat.encode()); + Assertions.assertEquals("CVVVkkkkkpFY.YA", usNat.encode()); } @Test @@ -176,7 +176,7 @@ public void testEncode3() { usNat.setFieldValue(UsNatField.MSPA_SERVICE_PROVIDER_MODE, 2); usNat.setFieldValue(UsNatField.GPC, true); - Assertions.assertEquals("BVVVkkkkkpFY.YA", usNat.encode()); + Assertions.assertEquals("CVVVkkkkkpFY.YA", usNat.encode()); } @Test @@ -184,12 +184,12 @@ public void testEncodeWithGpcSegmentIncluded() { UsNat usNat = new UsNat(); usNat.setFieldValue(UsNatField.GPC_SEGMENT_INCLUDED, false); - Assertions.assertEquals("BAAAAAAAAABA", usNat.encode()); + Assertions.assertEquals("CAAAAAAAAABA", usNat.encode()); } @Test public void testDecode1() throws DecodingException { - UsNat usNat = new UsNat("BVVVkkkkkpFY.YA"); + UsNat usNat = new UsNat("CVVVkkkkkpFY.YA"); Assertions.assertEquals(1, usNat.getSharingNotice()); Assertions.assertEquals(1, usNat.getSaleOptOutNotice()); @@ -235,6 +235,29 @@ public void testDecodeWithGpcSegmentExcluded() throws DecodingException { Assertions.assertEquals(false, usNat.getGpcSegmentIncluded()); } + @Test + public void testDecodeBackwardsCompatibility() throws DecodingException { + UsNat usNat = new UsNat("BVQqAAAACg"); + + Assertions.assertEquals(1, usNat.getSharingNotice()); + Assertions.assertEquals(1, usNat.getSaleOptOutNotice()); + Assertions.assertEquals(1, usNat.getSharingOptOutNotice()); + Assertions.assertEquals(1, usNat.getTargetedAdvertisingOptOutNotice()); + Assertions.assertEquals(0, usNat.getSensitiveDataProcessingOptOutNotice()); + Assertions.assertEquals(0, usNat.getSensitiveDataLimitUseNotice()); + Assertions.assertEquals(2, usNat.getSaleOptOut()); + Assertions.assertEquals(2, usNat.getSharingOptOut()); + Assertions.assertEquals(2, usNat.getTargetedAdvertisingOptOut()); + Assertions.assertEquals( + Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), usNat.getSensitiveDataProcessing()); + Assertions.assertEquals(Arrays.asList(0, 0), usNat.getKnownChildSensitiveDataConsents()); + Assertions.assertEquals(2, usNat.getPersonalDataConsents()); + Assertions.assertEquals(2, usNat.getMspaCoveredTransaction()); + Assertions.assertEquals(0, usNat.getMspaOptOutOptionMode()); + Assertions.assertEquals(0, usNat.getMspaServiceProviderMode()); + Assertions.assertEquals(false, usNat.getGpc()); + } + @Test() public void testDecodeGarbage() { Assertions.assertThrows( From 32e3a5fa8d00b12b2dc44dccddbf9fa4a99c61bc Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Thu, 26 Feb 2026 15:49:52 -0500 Subject: [PATCH 86/86] clean up mn --- .../src/main/java/com/iab/gpp/encoder/section/UsMn.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMn.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMn.java index 6813c3a2..eab08473 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMn.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMn.java @@ -1,8 +1,8 @@ package com.iab.gpp.encoder.section; +import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsMnField; import com.iab.gpp.encoder.segment.Base64Segment; -import java.util.List; public class UsMn extends AbstractUsSectionWithGpc { @@ -61,12 +61,10 @@ public Integer getTargetedAdvertisingOptOut() { return (Integer) this.getFieldValue(UsMnField.TARGETED_ADVERTISING_OPT_OUT); } - @SuppressWarnings("unchecked") - public List getSensitiveDataProcessing() { - return (List) this.getFieldValue(UsMnField.SENSITIVE_DATA_PROCESSING); + public FixedIntegerList getSensitiveDataProcessing() { + return (FixedIntegerList) this.getFieldValue(UsMnField.SENSITIVE_DATA_PROCESSING); } - @SuppressWarnings("unchecked") public Integer getKnownChildSensitiveDataConsents() { return (Integer) this.getFieldValue(UsMnField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS); }