public void run() throws Exception {
		Logger.logStep(null, "Beginning processing run");
		
		String[] inputFiles = inputRepository.getInputFiles();
		if(inputFiles == null){
			Logger.logStep(null, "Zero (0) input files");
			return;
		}
		
		Logger.logStep(null, inputFiles.length + " input files to process");
		
		for(String fileName : inputFiles) {
			Logger.logStep(fileName, "Beginning process");
			
			File inputFile = inputRepository.getUnprocessedFile(fileName);
			
			if(inputRepository.hasFileChanged(inputFile)) {
				Logger.logStep(fileName, "Input File has changed.  Waiting for next pass.");
				continue;
			}
			
			InputObject inputObject = inputObjectFactory.build(inputFile);
			Document document = documentFactory.build(inputObject);
			
			if(document == null) {
				Logger.logFailure(fileName, "Unable to determine document type");
				continue;
			}
			
			File pdfFile = inputRepository.getUnprocessedFile(document.getFileName());
			
			if(inputRepository.hasFileChanged(pdfFile)) {
				Logger.logStep(fileName, "PDF File has changed.  Waiting for next pass.");
				continue;
			}
			
			if(!documentRepository.copyToUnprocessedFolder(pdfFile)) {
				Logger.logFailure(fileName, "Unable to copy PDF file");
				continue;
			}
				
			if(!documentRepository.writeDocument(document)) {
				Logger.logFailure(fileName, "Unable to write document meta data");
				continue;
			}
			
			if(!inputRepository.moveToProcessedFolder(pdfFile)) {
				Logger.logFailure(fileName, "Unable to move PDF file to processed folder");
				continue;
			}
			
			if(!inputRepository.moveToProcessedFolder(inputFile)) {
				Logger.logFailure(fileName, "Unable to move input file to processed folder");
				continue;
			}
			
			Logger.logSuccess(fileName);
		}
	
		Logger.logStep(null, "Ending processing run");
		
	}