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.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashSet;
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.ClinicalService;
import gov.va.oneconsult.seoc.api.model.Hptc;
import gov.va.oneconsult.seoc.api.model.PayableService;
import gov.va.oneconsult.seoc.api.model.Seoc;
import gov.va.oneconsult.seoc.api.util.ApiUtil;
import gov.va.oneconsult.seoc.api.util.Constants;
import gov.va.oneconsult.seoc.api.util.EncodeLoggerFactory;

/**
* @author Ablevets
*
*/
@SuppressWarnings("serial")
public class SeocExternalSerializer extends StdSerializer<List<Seoc>>
{

private SimpleDateFormat formatter = new SimpleDateFormat("MM-dd-yyyy");

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

private String externalSystem;
/**
* Description: Parameterized Constructor
*
* @param t
*/
protected SeocExternalSerializer(Class<List<Seoc>> t)
{
super(t);
}

/**
* Description: Default Constructor
*/
public SeocExternalSerializer()
{
this(null);
externalSystem = Constants.HSRM;
}

public String getExternalSystem()
{
return externalSystem;
}

public void setExternalSystem(String externalSystem)
{
this.externalSystem = externalSystem;
}

/**
* {@inheritDoc}
*/
@Override
public void serialize(List<Seoc> seocList, JsonGenerator jgen, SerializerProvider sp)
throws IOException
{
String effectiveDate = null;
String endDate = null;
String activatedTimeStamp = null;
String discontinuedTimeStamp = null;
String codedTimeStamp = null;

jgen.writeStartObject();
jgen.writeArrayFieldStart("Seocs");
for (Seoc seoc : seocList) {
effectiveDate = null;
endDate = null;
activatedTimeStamp = null;
discontinuedTimeStamp = null;
codedTimeStamp = null;

try {
jgen.writeStartObject();
jgen.writeObjectFieldStart("Seoc");

if (externalSystem.contains(Constants.TOOLBOX)) {

jgen.writeStringField("seocId", ApiUtil.removeInvalidCharacters(seoc.getSeocId()));

jgen.writeStringField("name", ApiUtil.removeInvalidCharacters(seoc.getName()));

jgen.writeStringField("serviceLine", seoc.getServiceLineDescription());

jgen.writeStringField("categoryOfCare", seoc.getCoCDescription());

jgen.writeStringField("description",
ApiUtil.removeInvalidCharacters(ApiUtil.removeTrailingCharacters(seoc.getDescription())));

if (seoc.getDuration()!=null) {
jgen.writeNumberField("duration", seoc.getDuration());
} else {
jgen.writeStringField("duration", null);
}

jgen.writeStringField("proceduralOverview",
ApiUtil.removeInvalidCharacters(ApiUtil.removeTrailingCharacters(seoc.getProceduralOverview())));

jgen.writeStringField("disclaimer",
ApiUtil.removeInvalidCharacters(ApiUtil.removeTrailingCharacters(seoc.getDisclaimer())));

if (externalSystem.contains(Constants.TOOLBOX_V2)) {
jgen.writeStringField("previewText", seoc.getComment());
} else {
if (seoc.getMaxAllowableVisits()!=null) {
jgen.writeNumberField("maxAllowableVisits", seoc.getMaxAllowableVisits());
} else {
jgen.writeStringField("maxAllowableVisits", null);
}
}

} else if (externalSystem.equalsIgnoreCase(Constants.HSRM)) {
jgen.writeNumberField("id", seoc.getId());
jgen.writeNumberField("seocKey", seoc.getSeocKey());
jgen.writeStringField("name", seoc.getName());
jgen.writeStringField("seocId", seoc.getSeocId());
jgen.writeStringField("versionNumber", seoc.getVersionNumber());
jgen.writeStringField("description", seoc.getDescription());

if (seoc.getEffectiveDate() != null) {
effectiveDate = ApiUtil.formatDateToString(formatter, seoc.getEffectiveDate());
}
jgen.writeStringField("effectiveDate", effectiveDate);

if (seoc.getEndDate() != null) {
endDate = ApiUtil.formatDateToString(formatter, seoc.getEndDate());
}
jgen.writeStringField("endDate", endDate);

if (seoc.getDuration()!=null) {
jgen.writeNumberField("duration", seoc.getDuration());
} else {
jgen.writeStringField("duration", null);
}

if (seoc.getRev()!=null) {
jgen.writeBooleanField("REV", seoc.getRev());
} else {
jgen.writeStringField("REV", null);
}

jgen.writeStringField("proceduralOverview",
ApiUtil.removeTrailingCharacters(seoc.getProceduralOverview()));

if (seoc.getMaxAllowableVisits()!=null) {
jgen.writeNumberField("maxAllowableVisits", seoc.getMaxAllowableVisits());
} else {
jgen.writeStringField("maxAllowableVisits", null);
}

jgen.writeStringField("disclaimer",
ApiUtil.removeTrailingCharacters(seoc.getDisclaimer()));

if (seoc.getActivatedTimestamp() != null) {
activatedTimeStamp = ApiUtil.formatDateToString(formatter, seoc.getActivatedTimestamp());
}
jgen.writeStringField("activatedTimestamp", activatedTimeStamp);

jgen.writeStringField("activatedBy", seoc.getActivatedBy());

if (seoc.getDiscontinuedTimestamp() != null) {
discontinuedTimeStamp = ApiUtil.formatDateToString(formatter, seoc.getDiscontinuedTimestamp());
}
jgen.writeStringField("discontinuedTimestamp", discontinuedTimeStamp);

jgen.writeStringField("discontinuedBy", seoc.getDiscontinuedBy());
jgen.writeStringField("status", seoc.getStatusDescription());
jgen.writeStringField("QASP", seoc.getQASPDescription());
jgen.writeStringField("categoryOfCare", seoc.getCoCDescription());
jgen.writeStringField("serviceLine", seoc.getServiceLineDescription());

List<PayableService> services = new ArrayList<PayableService>();
if (seoc.getServices() != null) {
services = seoc.getServices();
jgen.writeArrayFieldStart("services");
for (PayableService service : services) {
jgen.writeStartObject();
jgen.writeNumberField("id", service.getId());
jgen.writeStringField("description", service.getDescription() );
if (service.getFrequency()!=null) {
jgen.writeNumberField("frequency", service.getFrequency());
} else {
jgen.writeStringField("frequency", null);
}
jgen.writeStringField("frequencytype", service.getFrequencyType());
if (service.getVisits()!=null) {
jgen.writeNumberField("visits", service.getVisits());
} else {
jgen.writeStringField("visits", null);
}
jgen.writeStringField("coderequired", service.getCodeRequired());
jgen.writeStringField("codedBy", service.getCodedBy());
if (service.getCodedTimestamp() != null) {
codedTimeStamp = ApiUtil.formatDateToString(formatter, service.getCodedTimestamp());
}
jgen.writeStringField("codedtimestamp", codedTimeStamp);

Set<ClinicalService> cliServices = service.getClinicalServices();
ClinicalService cs = null;

if (cliServices != null) {
cs = cliServices.iterator().next();
}
if (cs != null) {
jgen.writeStringField("clinicalService", cs.getDescription());
} else {
jgen.writeStringField("clinicalService", null);
}

Set<BillingCode> billingCodes = new HashSet<BillingCode>();
if (service.getBillingCodes()!=null) {
billingCodes = service.getBillingCodes();
}
jgen.writeObjectField("billingCodes", billingCodes);
Set<String> serviceHptcs = new HashSet<String>();
if (service.getServiceHptcs()!=null) {
serviceHptcs = service.getServiceHptcs();
jgen.writeArrayFieldStart("serviceHptcs");
for (String serviceHptc : serviceHptcs) {
jgen.writeStartObject();
jgen.writeStringField("HPTC", serviceHptc);
jgen.writeEndObject();
}
jgen.writeEndArray();
}
jgen.writeEndObject();
}
jgen.writeEndArray();

Set<Hptc> hptcs = new HashSet<Hptc>();
if (seoc.getHptcs()!=null) {
hptcs = seoc.getHptcs();
}
jgen.writeObjectField("hptcs", hptcs);
}
} else if (externalSystem.contains(Constants.HSRM_V2)) {
jgen.writeNumberField("id", seoc.getId());
jgen.writeNumberField("seocKey", seoc.getSeocKey());
jgen.writeStringField("name", seoc.getNameWithFlags());
jgen.writeStringField("seocId", seoc.getSeocId());
jgen.writeStringField("versionNumber", seoc.getVersionNumber());
jgen.writeStringField("description", seoc.getDescription());

if (seoc.getEffectiveDate() != null) {
effectiveDate = ApiUtil.formatDateToString(formatter,
seoc.getEffectiveDate());
}
jgen.writeStringField("effectiveDate", effectiveDate);

if (seoc.getEndDate() != null) {
endDate = ApiUtil.formatDateToString(formatter, seoc.getEndDate());
}
jgen.writeStringField("endDate", endDate);

if (seoc.getDuration() != null) {
jgen.writeNumberField("duration", seoc.getDuration());
} else {
jgen.writeStringField("duration", null);
}

if (seoc.getRev() != null) {
jgen.writeBooleanField("REV", seoc.getRev());
} else {
jgen.writeStringField("REV", null);
}

jgen.writeBooleanField("PRCT", seoc.getPrct());

jgen.writeStringField("proceduralOverview",
ApiUtil.removeTrailingCharacters(seoc.getProceduralOverview()));

if (seoc.getMaxAllowableVisits() != null) {
jgen.writeNumberField("maxAllowableVisits", seoc.getMaxAllowableVisits());
} else {
jgen.writeStringField("maxAllowableVisits", null);
}

jgen.writeStringField("disclaimer",
ApiUtil.removeTrailingCharacters(seoc.getDisclaimer()));
jgen.writeStringField("QASP", seoc.getQASPDescription());
jgen.writeStringField("categoryOfCare", seoc.getCoCDescription());
jgen.writeStringField("serviceLine", seoc.getServiceLineDescription());

Set<Hptc> hptcs = new HashSet<Hptc>();
if (seoc.getHptcs() != null) {
hptcs = seoc.getHptcs();
jgen.writeArrayFieldStart("hptcs");
for (Hptc hp : hptcs) {
jgen.writeStartObject();
jgen.writeStringField("hptc", hp.getHptc());
jgen.writeEndObject();
}
jgen.writeEndArray();
} else {
jgen.writeObjectField("hptcs", hptcs);
}

List<PayableService> services = new ArrayList<PayableService>();
if (seoc.getServices() != null) {
services = seoc.getServices();
jgen.writeArrayFieldStart("services");
for (PayableService service : services) {
jgen.writeStartObject();
jgen.writeNumberField("id", service.getId());
jgen.writeStringField("description", service.getDescription());
if (service.getFrequency() != null) {
jgen.writeNumberField("frequency", service.getFrequency());
} else {
jgen.writeStringField("frequency", null);
}
jgen.writeStringField("frequencyType", service.getFrequencyType());
if (service.getVisits() != null) {
jgen.writeNumberField("visits", service.getVisits());
} else {
jgen.writeStringField("visits", null);
}
jgen.writeStringField("codeRequired", service.getCodeRequired());

Set<ClinicalService> cliServices = new HashSet<ClinicalService>();
if (service.getClinicalServices() != null) {
cliServices = service.getClinicalServices();
jgen.writeArrayFieldStart("clinicalServices");
for (ClinicalService clinicalService : cliServices) {
jgen.writeStartObject();
jgen.writeStringField("clinicalService",
clinicalService.getDescription());
jgen.writeEndObject();
}
jgen.writeEndArray();
} else {
jgen.writeObjectField("clinicalServices", cliServices);
}

Set<BillingCode> billingCodes = new HashSet<BillingCode>();
if (service.getBillingCodes() != null) {
billingCodes = service.getBillingCodes();
jgen.writeArrayFieldStart("billingCodes");
for (BillingCode bc : billingCodes) {
jgen.writeStartObject();
jgen.writeNumberField("id", bc.getId());
jgen.writeBooleanField("precertRequired",
bc.getPrecertRequired());
jgen.writeStringField("billingCode", bc.getBillingCode());
jgen.writeStringField("codeType", bc.getCodeType());
jgen.writeEndObject();
}
jgen.writeEndArray();
} else {
jgen.writeObjectField("billingCodes", billingCodes);
}

Set<String> serviceHptcs = new HashSet<String>();
if (service.getServiceHptcs() != null) {
serviceHptcs = service.getServiceHptcs();
jgen.writeArrayFieldStart("serviceHptcs");
for (String serviceHptc : serviceHptcs) {
jgen.writeStartObject();
jgen.writeStringField("HPTC", serviceHptc);
jgen.writeEndObject();
}
jgen.writeEndArray();
}
jgen.writeEndObject();
}
jgen.writeEndArray();
}
}

} catch(Exception e) {
logger.error("Error occured in parsing the Seocs in SeocToolBoxSerializer "+ seoc.getId() +" Exception Message: " + e.getMessage());
throw new IOException("Exceptions occured in parsing the Seocs in SeocToolBoxSerializer at "+ seoc.getId());
}
jgen.writeEndObject();
jgen.writeEndObject();

}
jgen.writeEndArray();
jgen.writeEndObject();
}

}