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();
}
}