Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
451 changes: 306 additions & 145 deletions README.md

Large diffs are not rendered by default.

36 changes: 14 additions & 22 deletions iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,28 +10,7 @@
import com.iab.gpp.encoder.error.EncodingException;
import com.iab.gpp.encoder.error.InvalidFieldException;
import com.iab.gpp.encoder.field.HeaderV1Field;
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.TcfCaV1;
import com.iab.gpp.encoder.section.TcfEuV2;
import com.iab.gpp.encoder.section.UsCa;
import com.iab.gpp.encoder.section.UsCo;
import com.iab.gpp.encoder.section.UsCt;
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.UsMt;
import com.iab.gpp.encoder.section.UsNat;
import com.iab.gpp.encoder.section.UsNe;
import com.iab.gpp.encoder.section.UsNh;
import com.iab.gpp.encoder.section.UsNj;
import com.iab.gpp.encoder.section.UsOr;
import com.iab.gpp.encoder.section.UsTn;
import com.iab.gpp.encoder.section.UsTx;
import com.iab.gpp.encoder.section.UsUt;
import com.iab.gpp.encoder.section.UsVa;
import com.iab.gpp.encoder.section.UspV1;
import com.iab.gpp.encoder.section.*;

public class GppModel {
private Map<String, EncodableSection> sections = new HashMap<>();
Expand Down Expand Up @@ -119,6 +98,9 @@ public void setFieldValue(String sectionName, String fieldName, Object value) {
} else if (sectionName.equals(UsTn.NAME)) {
section = new UsTn();
this.sections.put(UsTn.NAME, section);
} else if (sectionName.equals(UsMn.NAME)) {
section = new UsMn();
this.sections.put(UsMn.NAME, section);
}
} else {
section = this.sections.get(sectionName);
Expand Down Expand Up @@ -316,6 +298,10 @@ public UsTn getUsTnSection() {
return (UsTn) getSection(UsTn.NAME);
}

public UsMn getUsMnSection() {
return (UsMn) getSection(UsMn.NAME);
}

public List<Integer> getSectionIds() {
if (!this.decoded) {
this.sections = this.decodeModel(this.encodedString);
Expand Down Expand Up @@ -427,6 +413,9 @@ protected Map<String, EncodableSection> decodeModel(String str) {
} else if (sectionIds.get(i).equals(UsTn.ID)) {
UsTn section = new UsTn(encodedSections[i + 1]);
sections.put(UsTn.NAME, section);
} else if (sectionIds.get(i).equals(UsMn.ID)) {
UsMn section = new UsMn(encodedSections[i + 1]);
sections.put(UsMn.NAME, section);
}
}
}
Expand Down Expand Up @@ -537,6 +526,9 @@ public void decodeSection(String sectionName, String encodedString) {
}else if (sectionName.equals(UsTn.NAME)) {
section = new UsTn();
this.sections.put(UsTn.NAME, section);
}else if (sectionName.equals(UsMn.NAME)) {
section = new UsMn();
this.sections.put(UsMn.NAME, section);
}
} else {
section = this.sections.get(sectionName);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package com.iab.gpp.encoder.field;

import java.util.Arrays;
import java.util.List;

public class UsMnField {

public static String VERSION = "Version";
public static String PROCESSING_NOTICE = "ProcessingNotice";
public static String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice";
public static String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice";
public static String SALE_OPT_OUT = "SaleOptOut";
public static String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut";
public static String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing";
public static String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents";
public static String ADDITIONAL_DATA_PROCESSING_CONSENT = "AdditionalDataProcessingConsent";
public static String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction";
public static String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode";
public static String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode";

public static String GPC_SEGMENT_TYPE = "GpcSegmentType";
public static String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded";
public static String GPC = "Gpc";

//@formatter:off
public static List<String> USMN_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] {
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
});
//@formatter:on

//@formatter:off
public static List<String> USMN_GPC_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] {
UsMnField.GPC_SEGMENT_TYPE,
UsMnField.GPC
});
//@formatter:on
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ public class Sections {
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_ID_NAME_MAP.put(UsMn.ID, UsMn.NAME);

SECTION_ORDER = new ArrayList<Integer>(SECTION_ID_NAME_MAP.keySet()).stream().sorted()
.map(id -> SECTION_ID_NAME_MAP.get(id)).collect(Collectors.toList());
Expand Down
141 changes: 141 additions & 0 deletions iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMn.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
package com.iab.gpp.encoder.section;

import com.iab.gpp.encoder.field.UsMnField;
import com.iab.gpp.encoder.segment.*;

import java.util.ArrayList;
import java.util.List;

public class UsMn extends AbstractLazilyEncodableSection {

public static int ID = 23;
public static int VERSION = 1;
public static String NAME = "usmn";

public UsMn() {
super();
}

public UsMn(String encodedString) {
super();
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 List<EncodableSegment> initializeSegments() {
List<EncodableSegment> segments = new ArrayList<>();
segments.add(new UsMnCoreSegment());
segments.add(new UsMnGpcSegment());
return segments;
}

@Override
protected List<EncodableSegment> decodeSection(String encodedString) {
List<EncodableSegment> segments = initializeSegments();

if (encodedString != null && !encodedString.isEmpty()) {
String[] encodedSegments = encodedString.split("\\.");

if (encodedSegments.length > 0) {
segments.get(0).decode(encodedSegments[0]);
}

if (encodedSegments.length > 1) {
segments.get(1).setFieldValue(UsMnField.GPC_SEGMENT_INCLUDED, true);
segments.get(1).decode(encodedSegments[1]);
} else {
segments.get(1).setFieldValue(UsMnField.GPC_SEGMENT_INCLUDED, false);
}
}

return segments;
}

@Override
protected String encodeSection(List<EncodableSegment> segments) {
List<String> encodedSegments = new ArrayList<>();

if (!segments.isEmpty()) {
encodedSegments.add(segments.get(0).encode());
if (segments.size() >= 2 && segments.get(1).getFieldValue(UsMnField.GPC_SEGMENT_INCLUDED).equals(true)) {
encodedSegments.add(segments.get(1).encode());
}
}

return String.join(".", encodedSegments);
}


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<Integer> getSensitiveDataProcessing() {
return (List<Integer>) this.getFieldValue(UsMnField.SENSITIVE_DATA_PROCESSING);
}

@SuppressWarnings("unchecked")
public List<Integer> getKnownChildSensitiveDataConsents() {
return (List<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 getGpcSegmentIncluded() {
return (Boolean) this.getFieldValue(UsMnField.GPC_SEGMENT_INCLUDED);
}

public Boolean getGpc() {
return (Boolean) this.getFieldValue(UsMnField.GPC);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
import com.iab.gpp.encoder.error.DecodingException;
import com.iab.gpp.encoder.field.EncodableBitStringFields;
import com.iab.gpp.encoder.field.UsDeField;
import com.iab.gpp.encoder.field.UsVaField;
import com.iab.gpp.encoder.section.UsDe;

public class UsDeCoreSegment extends AbstractLazilyEncodableSegment<EncodableBitStringFields> {
Expand Down Expand Up @@ -61,7 +60,7 @@ protected EncodableBitStringFields initializeFields() {
fields.put(UsDeField.SENSITIVE_DATA_PROCESSING,
new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0, 0))
.withValidator(nullableBooleanAsTwoBitIntegerListValidator));
fields.put(UsVaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS,
fields.put(UsDeField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS,
new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0, 0, 0))
.withValidator(nullableBooleanAsTwoBitIntegerListValidator));
fields.put(UsDeField.ADDITIONAL_DATA_PROCESSING_CONSENT,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
import com.iab.gpp.encoder.error.DecodingException;
import com.iab.gpp.encoder.field.EncodableBitStringFields;
import com.iab.gpp.encoder.field.UsIaField;
import com.iab.gpp.encoder.field.UsVaField;
import com.iab.gpp.encoder.section.UsIa;

public class UsIaCoreSegment extends AbstractLazilyEncodableSegment<EncodableBitStringFields> {
Expand Down Expand Up @@ -63,7 +62,7 @@ protected EncodableBitStringFields initializeFields() {
fields.put(UsIaField.SENSITIVE_DATA_PROCESSING,
new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0))
.withValidator(nullableBooleanAsTwoBitIntegerListValidator));
fields.put(UsVaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS,
fields.put(UsIaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS,
new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator));
fields.put(UsIaField.MSPA_COVERED_TRANSACTION,
new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator));
Expand Down
Loading
Loading