package com.cloudera.sa.hcu.io.route.scheduler.thread; import java.io.File; public class InputDirWatcherThread implements IRouteThread { boolean continueRunning = true; File inputFile; DirWatcherObserver observer; int waitInSeconds; int reportEveryNSeconds; String routePrefixName; public InputDirWatcherThread(String routePrefixName,File inputFile, DirWatcherObserver observer, int waitInSeconds) { this(routePrefixName, inputFile, observer, waitInSeconds, waitInSeconds); } public InputDirWatcherThread(String routePrefixName, File inputFile, DirWatcherObserver observer, int waitInSeconds, int reportEveryNSeconds) { this.inputFile = inputFile; this.observer = observer; this.waitInSeconds = waitInSeconds; this.reportEveryNSeconds = reportEveryNSeconds; this.routePrefixName = routePrefixName; } public void run() { long lastRunTime = System.currentTimeMillis(); System.out.println(routePrefixName + " - InputDirWatcherThread starting..."); try { while (continueRunning) { synchronized(this) { if ((System.currentTimeMillis() - lastRunTime) > (waitInSeconds * 1000)) { lastRunTime = System.currentTimeMillis(); File[] files = inputFile.listFiles(); if (files.length > 0) { observer.onDirWatcherFoundFiles(files); } }else { long millsLeft = (waitInSeconds *1000) - (System.currentTimeMillis() - lastRunTime); observer.onDirWatcherSecondsLeftReport((((double)(millsLeft))/1000.0)); } this.wait(reportEveryNSeconds * 1000); } } }catch (Exception e) { e.printStackTrace(); observer.onDirWatcherFiredExceptin( e); } } public void slowKill() { continueRunning = false; } }