Skip to content

Commit

Permalink
Dedupe and sort lists. Added InvalidFieldError. (#24)
Browse files Browse the repository at this point in the history
* fix optimized fix range decoder

* fix optimized fibonacci fix range decoder

* 3.0.8

* 3.0.9-SNAPSHOT

* 3.0.9

* 3.0.10-SNAPSHOT

* dedup and sort lists

* formatting

* 3.0.10

* 3.0.11-SNAPSHOT

* 3.0.12-SNAPSHOT

* 3.0.11-SNAPSHOT

* 3.0.10

* 3.0.11-SNAPSHOT

* 3.0.10

* 3.0.11-SNAPSHOT

* cleanup

Co-authored-by: chad <[email protected]>
  • Loading branch information
chuff and chad authored Jan 20, 2023
1 parent 1663a06 commit 2d39d96
Show file tree
Hide file tree
Showing 41 changed files with 501 additions and 165 deletions.
2 changes: 1 addition & 1 deletion iabgpp-encoder/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<parent>
<groupId>com.iabgpp</groupId>
<artifactId>iabgpp-core</artifactId>
<version>3.0.8-SNAPSHOT</version>
<version>3.0.11-SNAPSHOT</version>
</parent>

<artifactId>iabgpp-encoder</artifactId>
Expand Down
19 changes: 14 additions & 5 deletions iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import java.util.stream.Collectors;
import com.iab.gpp.encoder.error.DecodingException;
import com.iab.gpp.encoder.error.EncodingException;
import com.iab.gpp.encoder.error.InvalidFieldException;
import com.iab.gpp.encoder.section.EncodableSection;
import com.iab.gpp.encoder.section.HeaderV1;
import com.iab.gpp.encoder.section.Sections;
Expand All @@ -33,11 +34,11 @@ public GppModel(String encodedString) throws DecodingException {
}
}

public void setFieldValue(int sectionId, String fieldName, Object value) {
public void setFieldValue(int sectionId, String fieldName, Object value) throws InvalidFieldException {
setFieldValue(Sections.SECTION_ID_NAME_MAP.get(sectionId), fieldName, value);
}

public void setFieldValue(String sectionName, String fieldName, Object value) {
public void setFieldValue(String sectionName, String fieldName, Object value) throws InvalidFieldException {
EncodableSection section = null;
if (!this.sections.containsKey(sectionName)) {
if (sectionName.equals(TcfCaV1.NAME)) {
Expand Down Expand Up @@ -75,7 +76,7 @@ public void setFieldValue(String sectionName, String fieldName, Object value) {
if (section != null) {
section.setFieldValue(fieldName, value);
} else {
throw new Error(sectionName + " not found");
throw new InvalidFieldException(sectionName + "." + fieldName + " not found");
}
}

Expand Down Expand Up @@ -113,7 +114,11 @@ public boolean hasSection(String sectionName) {

public HeaderV1 getHeader() {
HeaderV1 header = new HeaderV1();
header.setFieldValue("SectionIds", this.getSectionIds());
try {
header.setFieldValue("SectionIds", this.getSectionIds());
} catch (InvalidFieldException e) {

}
return header;
}

Expand Down Expand Up @@ -204,7 +209,11 @@ public String encode() throws EncodingException {
}

HeaderV1 header = new HeaderV1();
header.setFieldValue("SectionIds", this.getSectionIds());
try {
header.setFieldValue("SectionIds", this.getSectionIds());
} catch (InvalidFieldException e) {
throw new EncodingException(e);
}
encodedSections.add(0, header.encode());

String encodedString = encodedSections.stream().collect(Collectors.joining("~"));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,10 @@
public abstract class AbstractEncodableBitStringDataType<T> {
protected T value;

public AbstractEncodableBitStringDataType() {
protected AbstractEncodableBitStringDataType() {

}

public AbstractEncodableBitStringDataType(T value) {
this.value = value;
}

public boolean hasValue() {
return this.value != null;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,13 @@

public class EncodableBoolean extends AbstractEncodableBitStringDataType<Boolean> {

public EncodableBoolean() {
protected EncodableBoolean() {
super();
}

public EncodableBoolean(Boolean value) {
super(value);
super();
setValue(value);
}

public String encode() throws EncodingException {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,13 @@

public class EncodableDatetime extends AbstractEncodableBitStringDataType<ZonedDateTime> {

public EncodableDatetime() {
protected EncodableDatetime() {
super();
}

public EncodableDatetime(ZonedDateTime value) {
super(value);
super();
setValue(value);
}

public String encode() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,13 @@

public class EncodableFibonacciInteger extends AbstractEncodableBitStringDataType<Integer> {

public EncodableFibonacciInteger() {
protected EncodableFibonacciInteger() {
super();
}

public EncodableFibonacciInteger(Integer value) {
super(value);
super();
setValue(value);
}

public String encode() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,21 @@
package com.iab.gpp.encoder.datatype;

import java.util.ArrayList;
import java.util.List;
import java.util.TreeSet;
import com.iab.gpp.encoder.datatype.encoder.FibonacciIntegerRangeEncoder;
import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder;
import com.iab.gpp.encoder.error.DecodingException;

public class EncodableFibonacciIntegerRange extends AbstractEncodableBitStringDataType<List<Integer>> {

public EncodableFibonacciIntegerRange() {
protected EncodableFibonacciIntegerRange() {
super();
}

public EncodableFibonacciIntegerRange(List<Integer> value) {
super(value);
super();
setValue(value);
}

public String encode() {
Expand All @@ -36,4 +39,15 @@ public String substring(String bitString, int fromIndex) throws DecodingExceptio
}
return bitString.substring(fromIndex, index);
}

@SuppressWarnings("unchecked")
@Override
public void setValue(Object value) {
super.setValue(new ArrayList<>(new TreeSet<>((List<Integer>) value)));
}

@Override
public List<Integer> getValue() {
return new ArrayList<>(super.getValue());
}
}
Original file line number Diff line number Diff line change
@@ -1,26 +1,28 @@
package com.iab.gpp.encoder.datatype;

import java.util.ArrayList;
import java.util.List;
import com.iab.gpp.encoder.datatype.encoder.FixedBitfieldEncoder;
import com.iab.gpp.encoder.error.DecodingException;
import com.iab.gpp.encoder.error.EncodingException;

public class EncodableFixedBitfield extends AbstractEncodableBitStringDataType<List<Boolean>> {

private int bitStringLength;
private int numElements;

public EncodableFixedBitfield(int bitStringLength) {
protected EncodableFixedBitfield(int numElements) {
super();
this.bitStringLength = bitStringLength;
this.numElements = numElements;
}

public EncodableFixedBitfield(int bitStringLength, List<Boolean> value) {
super(value);
this.bitStringLength = bitStringLength;
public EncodableFixedBitfield(List<Boolean> value) {
super();
this.numElements = value.size();
setValue(value);
}

public String encode() throws EncodingException {
return FixedBitfieldEncoder.encode(this.value, this.bitStringLength);
return FixedBitfieldEncoder.encode(this.value, this.numElements);
}

public void decode(String bitString) throws DecodingException {
Expand All @@ -29,6 +31,24 @@ public void decode(String bitString) throws DecodingException {

public String substring(String bitString, int fromIndex) {
// TODO: validate
return bitString.substring(fromIndex, fromIndex + this.bitStringLength);
return bitString.substring(fromIndex, fromIndex + this.numElements);
}

@SuppressWarnings("unchecked")
@Override
public void setValue(Object value) {
List<Boolean> v = new ArrayList<>((List<Boolean>) value);
for (int i = v.size(); i < numElements; i++) {
v.add(false);
}
if (v.size() > numElements) {
v = v.subList(0, numElements);
}
super.setValue(v);
}

@Override
public List<Boolean> getValue() {
return new ArrayList<>(super.getValue());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,15 @@ public class EncodableFixedInteger extends AbstractEncodableBitStringDataType<In

private int bitStringLength;

public EncodableFixedInteger(int bitStringLength) {
protected EncodableFixedInteger(int bitStringLength) {
super();
this.bitStringLength = bitStringLength;
}

public EncodableFixedInteger(int bitStringLength, Integer value) {
super(value);
super();
this.bitStringLength = bitStringLength;
setValue(value);
}

public String encode() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.iab.gpp.encoder.datatype;

import java.util.ArrayList;
import java.util.List;
import com.iab.gpp.encoder.datatype.encoder.FixedIntegerListEncoder;
import com.iab.gpp.encoder.error.DecodingException;
Expand All @@ -10,16 +11,17 @@ public class EncodableFixedIntegerList extends AbstractEncodableBitStringDataTyp
private int elementBitStringLength;
private int numElements;

public EncodableFixedIntegerList(int elementBitStringLength, int size) {
protected EncodableFixedIntegerList(int elementBitStringLength, int numElements) {
super();
this.elementBitStringLength = elementBitStringLength;
this.numElements = size;
this.numElements = numElements;
}

public EncodableFixedIntegerList(int elementBitStringLength, List<Integer> value) {
super(value);
super();
this.elementBitStringLength = elementBitStringLength;
this.numElements = value.size();
setValue(value);
}

public String encode() throws EncodingException {
Expand All @@ -34,4 +36,22 @@ public String substring(String bitString, int fromIndex) {
// TODO: validate
return bitString.substring(fromIndex, fromIndex + (this.elementBitStringLength * numElements));
}

@SuppressWarnings("unchecked")
@Override
public void setValue(Object value) {
List<Integer> v = new ArrayList<>((List<Integer>) value);
for (int i = v.size(); i < numElements; i++) {
v.add(0);
}
if (v.size() > numElements) {
v = v.subList(0, numElements);
}
super.setValue(v);
}

@Override
public List<Integer> getValue() {
return new ArrayList<>(super.getValue());
}
}
Original file line number Diff line number Diff line change
@@ -1,18 +1,21 @@
package com.iab.gpp.encoder.datatype;

import java.util.ArrayList;
import java.util.List;
import java.util.TreeSet;
import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder;
import com.iab.gpp.encoder.datatype.encoder.FixedIntegerRangeEncoder;
import com.iab.gpp.encoder.error.DecodingException;

public class EncodableFixedIntegerRange extends AbstractEncodableBitStringDataType<List<Integer>> {

public EncodableFixedIntegerRange() {
protected EncodableFixedIntegerRange() {
super();
}

public EncodableFixedIntegerRange(List<Integer> value) {
super(value);
super();
setValue(value);
}

public String encode() {
Expand All @@ -37,4 +40,14 @@ public String substring(String bitString, int fromIndex) throws DecodingExceptio
return bitString.substring(fromIndex, index);
}

@SuppressWarnings("unchecked")
@Override
public void setValue(Object value) {
super.setValue(new ArrayList<>(new TreeSet<>((List<Integer>) value)));
}

@Override
public List<Integer> getValue() {
return new ArrayList<>(super.getValue());
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,15 @@ public class EncodableFixedString extends AbstractEncodableBitStringDataType<Str

private int stringLength;

public EncodableFixedString(int stringLength) {
protected EncodableFixedString(int stringLength) {
super();
this.stringLength = stringLength;
}

public EncodableFixedString(int stringLength, String value) {
super(value);
super();
this.stringLength = stringLength;
setValue(value);
}

public String encode() throws EncodingException {
Expand Down
Loading

0 comments on commit 2d39d96

Please sign in to comment.