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.med.x277ca.file.watcher;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import org.apache.commons.io.FilenameUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import gov.va.med.ars.model.request.Parse277CARequest;
import gov.va.med.ars.service.IParse277CAServiceImpl;
public class IngestFileProcessor implements Runnable {
private static final Logger logger = LogManager.getLogger(IngestFileProcessor.class);
private static final Object LOCK = new Object();
private Path fileToBeProcessed;
private String ingestFileArchiveDirectory;
private IParse277CAServiceImpl parseService;
public IngestFileProcessor(Path fileToBeProcessed, String ingestFileArchiveDirectory,
IParse277CAServiceImpl parseService) {
this.fileToBeProcessed = fileToBeProcessed;
this.ingestFileArchiveDirectory = ingestFileArchiveDirectory;
this.parseService = parseService;
}
@Override
public void run() {
Path pathToFileThatWillBeParsed = null;
// archive the file
logger.info("Routing file to archival: " + fileToBeProcessed + " -> Archive Directory: "
+ ingestFileArchiveDirectory);
try {
pathToFileThatWillBeParsed = getNewFileIngestArchiver().archiveFile(fileToBeProcessed,
FilenameUtils.normalize(ingestFileArchiveDirectory));
} catch (Exception e) {
logger.warn(String.format("Error during archiving file %s.", fileToBeProcessed), e);
pathToFileThatWillBeParsed = fileToBeProcessed;
}
if (pathToFileThatWillBeParsed.toFile() != null && pathToFileThatWillBeParsed.toFile().exists()
/*&& pathToFileThatWillBeParsed.toFile().length() > 0*/) {
// send content to processor
logger.info("Sending content in file to 277 parser: " + pathToFileThatWillBeParsed + " -> using Parser: "
+ parseService.toString());
boolean parseSuccess = false;
synchronized (LOCK) {
parseSuccess = readFileIntoParseService(pathToFileThatWillBeParsed, parseService,
fileToBeProcessed.getFileName().toString());
}
if (parseSuccess) {
logger.info(String.format("File located at %s was parsed correctly", pathToFileThatWillBeParsed));
} else {
logger.info(String.format("File located at %s was not parsed correctly", pathToFileThatWillBeParsed));
}
} else {
logger.info(String.format(
"File located at %s did not meet conditions (not null, exists, and has content) to be parsed.",
pathToFileThatWillBeParsed));
}
}
private boolean readFileIntoParseService(Path archiveFileToBeRead, IParse277CAServiceImpl parseService,
String originalFileName) {
boolean success = false;
try {
String fileContents = new String(Files.readAllBytes(archiveFileToBeRead));
Parse277CARequest parseRequest = new Parse277CARequest(fileContents, null, originalFileName);
parseService.process277CABatch(parseRequest);
success = true;
} catch (IOException e) {
logger.error(String.format("Error where attempting to read file %s into byte array",
archiveFileToBeRead.toString()), e);
}
return success;
}
private IngestFileArchiver getNewFileIngestArchiver() {
return new IngestFileArchiver();
}
}