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

}