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.vamf.scheduling.varutility.domain;

import agilex.commons.NullChecker;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.*;

import static gov.va.vamf.scheduling.varutility.utils.VarUtilityConstants.REQUEST_SCHEDULING_METHOD;

@XmlAccessorType(value = XmlAccessType.NONE)
@XmlRootElement(namespace = Namespace.VarUtility)
public class CoreSettings extends DomainBaseObjects<CoreSetting> {

public static final String PRIMARY_CARE_ID = "323";

String[] booleans = {"Yes", "No"};
Integer[] durations = {365, 730};
ArrayList<String> careTypeIdsList = new ArrayList<String>();
ArrayList<String> validBooleans = new ArrayList<String>(Arrays.asList(booleans));
ArrayList<Integer> validDurations = new ArrayList<Integer>(Arrays.asList(durations));

public ArrayList<ValidationError> validate(List<ClinicalServices> clinicalServices, String schedulingMethod) {
ArrayList<ValidationError> errors = new ArrayList<ValidationError>();

validateTypesOfCare(errors, clinicalServices);
validatePatientHistoryRequired(errors);
validateDurations(errors);

if (schedulingMethod.equals(REQUEST_SCHEDULING_METHOD)) {
validateSubmittedRequestLimit(errors, clinicalServices);
} else {
validateCanCancel(errors);
}
return errors;
}

private void validateDurations(ArrayList<ValidationError> errors) {
for(CoreSetting c : this) {
if(NullChecker.isNotNullish(c.getPatientHistoryRequired()) &&
c.getPatientHistoryRequired().equals("Yes") &&
NullChecker.isNullish(c.getPatientHistoryDuration())) {
errors.add(new ValidationError(c.getTypeOfCare(),
"PatientHistoryDuration is required."));
}
if(NullChecker.isNotNullish(c.getPatientHistoryDuration()) &&
! validDurations.contains(c.getPatientHistoryDuration())) {
errors.add(new ValidationError(c.getTypeOfCare(),
"Valid values for patientHistoryDuration are 365, 730, or null"));
}
}
}

private void validatePatientHistoryRequired(ArrayList<ValidationError> errors) {
for(CoreSetting c : this) {
if(NullChecker.isNotNullish(c.getPatientHistoryRequired()) &&
! validBooleans.contains(c.getPatientHistoryRequired())) {
errors.add(new ValidationError(c.getTypeOfCare(),
"Valid values for patientHistoryRequired are Yes, No, or null"));
}
}
}

private void validateTypesOfCare(ArrayList<ValidationError> errors, List<ClinicalServices> clinicalServices) {
for (ClinicalServices clinicalService : clinicalServices) {
careTypeIdsList.add(clinicalService.getId());
}
ArrayList<String> inputCareTypeIdsList = new ArrayList<String>();

for(CoreSetting c : this) {
inputCareTypeIdsList.add(c.getId());
}

if(! inputCareTypeIdsList.containsAll(careTypeIdsList)) {
errors.add(new ValidationError("CoreSettings does not contain all care types."));
}

if(inputCareTypeIdsList.size() != careTypeIdsList.size()) {
errors.add(new ValidationError("Invalid care types."));
}
}

private void validateCanCancel(ArrayList<ValidationError> errors) {
for(CoreSetting c : this) {
if(c.getCanCancel() == null) {
errors.add(new ValidationError(c.getTypeOfCare(),
"Cancel appointment is required."));
}
}
}

private void validateSubmittedRequestLimit(ArrayList<ValidationError> errors, List<ClinicalServices> clinicalServices) {
Map<String, Integer> serviceSubmittedRequestLimits = new HashMap<String, Integer>();
for (ClinicalServices clinicalService : clinicalServices) {
serviceSubmittedRequestLimits.put(clinicalService.getId(), clinicalService.getSubmittedRequestLimit());
}
for(CoreSetting c : this) {
if (c.getSubmittedRequestLimit() == null) {
errors.add(new ValidationError(c.getTypeOfCare(),
"Submitted Request Limit is required"));
} else {
if (c.getSubmittedRequestLimit() > serviceSubmittedRequestLimits.get(c.getId())) {
errors.add(new ValidationError(c.getTypeOfCare(), "Submitted Request Limit cannot be more than " + serviceSubmittedRequestLimits.get(c.getId())));
}
}
}
}

public void cleanupDataForSave() {
for(CoreSetting cs : this) {
if(cs.getId().equals(PRIMARY_CARE_ID)) {
cs.setPatientHistoryDuration(null);
} else {
if(NullChecker.isNullish(cs.getPatientHistoryRequired()) || cs.getPatientHistoryRequired().equals("No")) {
cs.setPatientHistoryDuration(0);
}
}
cs.setSubmittedRequestLimit(null);
}
}
}