package gov.samhsa.consent2share.showcase.web;
import gov.samhsa.acs.pep.wsclient.PepWebServiceClient;
import gov.samhsa.acs.pep.security.CredentialProviderImpl;
import gov.samhsa.consent2share.c32.C32Parser;
import gov.samhsa.consent2share.showcase.infrastructure.C32Getter;
import gov.samhsa.consent2share.showcase.service.EhrNumOneDto;
import gov.samhsa.consent2share.showcase.service.MailService;
import gov.samhsa.consent2share.showcase.service.MailServiceImpl;
import gov.samhsa.consent2share.showcase.service.PixOperationsService;
import gov.samhsa.consent2share.showcase.service.ProviderDto;
import gov.samhsa.ds4ppilot.schema.pep.DirectEmailSendRequest;
import gov.samhsa.ds4ppilot.schema.pep.DirectEmailSendResponse;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Properties;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping("/pushC32")
public class PushC32Controller {
@Autowired
C32Getter c32Getter;
@Autowired
C32Parser c32Parser;
MailService mailService;
String endPointAddress = "http://localhost:8080/Pep/services/PepService";
Properties props;
String username;
/** The logger. */
final Logger logger = LoggerFactory.getLogger(this.getClass());
/** The pix operations service. */
@Autowired
PixOperationsService pixOperationsService;
@RequestMapping(method = RequestMethod.GET)
public @ResponseBody
EhrNumOneDto get() {
System.out.println("Loading PushC32");
EhrNumOneDto dto = new EhrNumOneDto();
return dto;
}
// public static void main(String[] args) {
// PushC32Controller controller = new PushC32Controller();
// controller.setC32Getter(new C32GetterImpl(controller.endPointAddress));
// controller.getRedactedC32("PUI100010060001");
// }
@RequestMapping(value = "/c32/{patientId}", method = RequestMethod.GET)
public @ResponseBody
String getC32(@PathVariable("patientId") String patientId) {
String c32Xml = this.c32Getter.getC32(patientId);
DirectEmailSendRequest directEmailSendRequest = new DirectEmailSendRequest();
// set c32 to the request
String segmentedC32Xml = pixOperationsService.updatePatientAndAuthorId(c32Xml);
directEmailSendRequest.setC32(segmentedC32Xml);
mailService = new MailServiceImpl();
PepWebServiceClient client = new PepWebServiceClient(endPointAddress, new CredentialProviderImpl());
DirectEmailSendResponse response = client
.directEmailSend(directEmailSendRequest);
System.out.println("Direct Email Send Response: "
+ response.getPdpDecision());
String errorMessage = "";
if (response.getPdpDecision().equals("DENY")) {
errorMessage = "Sending of the C32 is not allowed. Please check privacy policies for patient.";
} else if (response.getPdpDecision().equals("NO_POLICY")) {
errorMessage = "Sending of the C32 is not allowed. There are no policies for patient.";
}
String signature = "\n\nThank you,\nREM 1 Support";
if (response.getPdpDecision().equals("DENY")
|| response.getPdpDecision().equals("NO_POLICY")) {
mailService.sendMailOnFailure(new ProviderDto(
"leo.smith@direct.obhita-stage.org"), new ProviderDto(),
errorMessage + signature);
return "Failure! of C32!!";
}
// saveXML(c32Xml, segmentedC32Xml);
return segmentedC32Xml;
}
public void saveXML(String c32Xml, String segmentedC32Xml) {
File originalC32File;
File segmentedC32File;
FileOutputStream fop = null;
try {
String content = "This is the content to write into file";
originalC32File = new File("/c32_1.xml");
segmentedC32File = new File("/segmentedc32_1.xml");
// if file doesnt exists, then create it
if (!originalC32File.exists()) {
originalC32File.createNewFile();
}
if (!segmentedC32File.exists()) {
segmentedC32File.createNewFile();
}
FileWriter fw = new FileWriter(originalC32File.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
bw.write(content);
bw.close();
fw = new FileWriter(segmentedC32File.getAbsoluteFile());
bw = new BufferedWriter(fw);
bw.write(content);
bw.close();
System.out.println("Done");
} catch (IOException e) {
e.printStackTrace();
}
}
public void setC32Getter(C32Getter c32Getter) {
this.c32Getter = c32Getter;
}
public void setC32Parser(C32Parser c32Parser) {
this.c32Parser = c32Parser;
}
}