Summary Table

Categories Total Count
PII 0
URL 0
DNS 0
EKL 0
IP 0
PORT 0
VsID 0
CF 0
AI 0
VPD 0
PL 0
Other 0

File Content

package gov.va.oneconsult.seoc.api.serializer;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Set;

import org.apache.log4j.Logger;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;

import gov.va.oneconsult.seoc.api.model.BillingCode;
import gov.va.oneconsult.seoc.api.model.Seoc;
import gov.va.oneconsult.seoc.api.util.EncodeLoggerFactory;
import gov.va.security.util.DataSanitizer;

/**
* Description: Serialize Collection of Seoc and billingCodes object.
*
* @author AbleVets
*/
@SuppressWarnings("serial")

public class SeocBillingCodeSerializer extends StdSerializer<List<Seoc>> {
private DataSanitizer ds = new DataSanitizer();

public static final Logger logger = EncodeLoggerFactory.getLogger(SeocBillingCodeSerializer.class);

/**
* Description: Parameterized Constructor
*
* @param t
*/
protected SeocBillingCodeSerializer(Class<List<Seoc>> t) {

super(t);
}

/**
* Description: Default Constructor
*/
public SeocBillingCodeSerializer() {

this(null);
}

/**
* {@inheritDoc}
*/
@Override
public void serialize(List<Seoc> seocList, JsonGenerator jgen, SerializerProvider sp) throws IOException {
jgen.writeStartArray();

for (Seoc seoc : seocList) {
jgen.writeStartObject();
jgen.writeStringField("name", ds.sanitizeOutputData(seoc.getName()));

jgen.writeStringField("versionNumber", seoc.getVersionNumber());

Set<BillingCode> billingCodesSet = seoc.getBillingCodesForSeoc();

List<BillingCode> billingCodesList = billingCodesSet == null ? new ArrayList<BillingCode>() : sortBillingCodes(billingCodesSet);

jgen.writeArrayFieldStart("billingCodes");

billingCodesList.forEach(billingCode -> {
try {
jgen.writeStartObject();
jgen.writeNumberField("id", billingCode.getId());
jgen.writeBooleanField("precertRequired", billingCode.getPrecertRequired());
jgen.writeStringField("billingCode", ds.sanitizeOutputData(billingCode.getBillingCode()));
jgen.writeStringField("codeType", billingCode.getCodeType());
jgen.writeEndObject();
} catch (IOException e) {
logger.error("Error occured in parsing the BillingCodes in BillingCodeSerializer "+ billingCode.getBillingCode() +" Exception Message: " + e.getMessage());
}
});

jgen.writeEndArray();
jgen.writeEndObject();
} // End of Loop
jgen.writeEndArray();
}

public List<BillingCode> sortBillingCodes(Set<BillingCode> billingCodesSet) {
List<BillingCode> billingCodesList = new ArrayList<BillingCode>();

if (billingCodesSet == null || billingCodesSet.isEmpty()) {
return null;
}

billingCodesSet.forEach(billingCode -> {
if (billingCode != null) {
billingCodesList.add(billingCode);
}
});

Comparator<BillingCode> compareByBillingCode = (BillingCode billingCode1, BillingCode billingCode2) ->
billingCode1.getBillingCode().compareTo(billingCode2.getBillingCode());

Collections.sort(billingCodesList, compareByBillingCode);

return billingCodesList;
}
}