package gov.samhsa.consent2share.domain.clinicaldata;
import gov.samhsa.consent2share.domain.patient.PatientDataOnDemand;
import gov.samhsa.consent2share.domain.reference.ClinicalDocumentTypeCodeDataOnDemand;
import gov.samhsa.consent2share.service.clinicaldata.ClinicalDocumentService;
import java.security.SecureRandom;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Random;
import javax.validation.ConstraintViolation;
import javax.validation.ConstraintViolationException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.stereotype.Component;
@Configurable
@Component
public class ClinicalDocumentDataOnDemand {
private Random rnd = new SecureRandom();
private List<ClinicalDocument> data;
@Autowired
ClinicalDocumentTypeCodeDataOnDemand clinicalDocumentTypeCodeDataOnDemand;
@Autowired
PatientDataOnDemand patientDataOnDemand;
@Autowired
ClinicalDocumentService clinicalDocumentService;
@Autowired
ClinicalDocumentRepository clinicalDocumentRepository;
public ClinicalDocument getNewTransientClinicalDocument(int index) {
ClinicalDocument obj = new ClinicalDocument();
setContent(obj, index);
setContentType(obj, index);
setDescription(obj, index);
setDocumentSize(obj, index);
setDocumentUrl(obj, index);
setFilename(obj, index);
setName(obj, index);
return obj;
}
public void setContent(ClinicalDocument obj, int index) {
byte[] content = new byte[]{};
obj.setContent(content);
}
public void setContentType(ClinicalDocument obj, int index) {
String contentType = "contentType_" + index;
obj.setContentType(contentType);
}
public void setDescription(ClinicalDocument obj, int index) {
String description = "description_" + index;
if (description.length() > 500) {
description = description.substring(0, 500);
}
obj.setDescription(description);
}
public void setDocumentSize(ClinicalDocument obj, int index) {
Long documentSize = new Integer(index).longValue();
obj.setDocumentSize(documentSize);
}
public void setDocumentUrl(ClinicalDocument obj, int index) {
String documentUrl = "documentUrl_" + index;
if (documentUrl.length() > 100) {
documentUrl = documentUrl.substring(0, 100);
}
obj.setDocumentUrl(documentUrl);
}
public void setFilename(ClinicalDocument obj, int index) {
String filename = "filename_" + index;
obj.setFilename(filename);
}
public void setName(ClinicalDocument obj, int index) {
String name = "name_" + index;
if (name.length() > 30) {
name = name.substring(0, 30);
}
obj.setName(name);
}
public ClinicalDocument getSpecificClinicalDocument(int index) {
init();
if (index < 0) {
index = 0;
}
if (index > (data.size() - 1)) {
index = data.size() - 1;
}
ClinicalDocument obj = data.get(index);
Long id = obj.getId();
return clinicalDocumentService.findClinicalDocument(id);
}
public ClinicalDocument getRandomClinicalDocument() {
init();
ClinicalDocument obj = data.get(rnd.nextInt(data.size()));
Long id = obj.getId();
return clinicalDocumentService.findClinicalDocument(id);
}
public boolean modifyClinicalDocument(ClinicalDocument obj) {
return false;
}
public void init() {
int from = 0;
int to = 10;
data = clinicalDocumentService.findClinicalDocumentEntries(from, to);
if (data == null) {
throw new IllegalStateException("Find entries implementation for 'ClinicalDocument' illegally returned null");
}
if (!data.isEmpty()) {
return;
}
data = new ArrayList<ClinicalDocument>();
for (int i = 0; i < 10; i++) {
ClinicalDocument obj = getNewTransientClinicalDocument(i);
try {
clinicalDocumentRepository.save(obj);
} catch (ConstraintViolationException e) {
StringBuilder msg = new StringBuilder();
for (Iterator<ConstraintViolation<?>> iter = e.getConstraintViolations().iterator(); iter.hasNext();) {
ConstraintViolation<?> cv = iter.next();
msg.append("[").append(cv.getConstraintDescriptor()).append(":").append(cv.getMessage()).append("=").append(cv.getInvalidValue()).append("]");
}
throw new RuntimeException(msg.toString(), e);
}
clinicalDocumentRepository.flush();
data.add(obj);
}
}
}