You are on page 1of 4

package com.pgc.campaign.manager.services.

agent;

import static java.nio.file.StandardWatchEventKinds.ENTRY_CREATE;


import static java.nio.file.StandardWatchEventKinds.ENTRY_DELETE;
import static java.nio.file.StandardWatchEventKinds.ENTRY_MODIFY;

import java.io.IOException;
import java.lang.invoke.MethodHandles;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.WatchEvent;
import java.nio.file.WatchKey;
import java.nio.file.WatchService;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;

import com.pgc.campaign.manager.common.CampaignManagerConfiguration;
import com.pgc.campaign.manager.core.CoreEngine;

public class DirWatcher implements Runnable {

private Path dir;


private WatchService watcher;
private WatchKey key;
private String tag;

static String filename = "";


static String eventTag = "";

private final CoreEngine engine = null;

static Logger logger =


LogManager.getLogger(MethodHandles.lookup().lookupClass());

@SuppressWarnings("unchecked")
static <T> WatchEvent<T> cast(WatchEvent<?> event) {
return (WatchEvent<T>) event;
}

/**
* Creates a WatchService and registers the given directory
*/
public DirWatcher(Path dir, String tag) throws IOException {
this.tag = tag;
this.dir = dir;
this.watcher = FileSystems.getDefault().newWatchService();
this.key = dir.register(watcher, ENTRY_CREATE, ENTRY_DELETE, ENTRY_MODIFY);
}
public void run() {

try {
for (;;) {
// wait for key to be signalled
WatchKey key = watcher.take();

if (this.key != key) {
System.err.println("WatchKey not recognized!");
continue;
}

for (WatchEvent<?> event : key.pollEvents()) {


WatchEvent<Path> ev = cast(event);
System.out.format("%s: %s\n", ev.kind(),
dir.resolve(ev.context()));
// TODO: handle event. E.g. call listeners
filename = dir.resolve(ev.context()).toString();
eventTag = ev.kind().toString();

if (ev.kind() == ENTRY_CREATE) {
System.out.println("tag = " + tag + " filename = " +
filename);
executeBlaster( filename );
}
}

// reset key
if (!key.reset()) {
break;
}

}
} catch (InterruptedException x) {
return;
}
}

public static void main(String[] args) throws IOException,


InterruptedException, ExecutionException, TimeoutException {

Path dirBlaster = Paths.get("C:\\Users\\jgramos\\PLDT Global\\PLDT Global


Customer Experience Team - Campaign Manager\\Freebee Campaign Manager\\Freebee
Blaster Files");
Path dirWhitelist = Paths.get("C:\\Users\\jgramos\\PLDT Global\\PLDT Global
Customer Experience Team - Campaign Manager\\Freebee Campaign Manager\\Freebee
Whitelists");

DirWatcher watcherBlaster = new DirWatcher(dirBlaster, "Blaster");


DirWatcher watcherWhitelist = new DirWatcher(dirWhitelist, "Whitelist");

ExecutorService executorBlaster = Executors.newSingleThreadExecutor();


Future<?> futureBlaster = executorBlaster.submit(watcherBlaster);

ExecutorService executorWhitelist = Executors.newSingleThreadExecutor();


Future<?> futureWhitelist = executorWhitelist.submit(watcherWhitelist);
//executor.shutdown();

// Now, the watcher runs in parallel


// Do other stuff here
System.out.println("do other stuffs...");

// Shutdown after 10 seconds


//executor.awaitTermination(10000, TimeUnit.SECONDS);
// abort watcher
//future.cancel(true);

//executor.awaitTermination(10000, TimeUnit.SECONDS);
//executor.shutdownNow();
}

private static void executeBlaster(String filename) {

CoreEngine.startup();

logger.info(MethodHandles.lookup().lookupClass().getSimpleName() + "
started.");

try {

CoreEngine.getGlobalTimer().start();
CoreEngine.getTimer().reset();

logger.info(MethodHandles.lookup().lookupClass().getSimpleName() + "
sleeping for " + CampaignManagerConfiguration.FOLDER_WATCHER_SLEEP + "
milliseconds...");
Thread.sleep(CampaignManagerConfiguration.FOLDER_WATCHER_SLEEP);

CoreEngine.getGlobalTimer().stop();
logger.info(MethodHandles.lookup().lookupClass().getSimpleName() + "
sleep done. Elapsed time: " + CoreEngine.getGlobalTimer());

} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

CoreEngine.getGlobalTimer().start();
CoreEngine.getTimer().reset();

logger.info(MethodHandles.lookup().lookupClass().getSimpleName() + "
executing blaster...");

try {
//System.out.println("Blaster Module is Disabled!!!");
CoreEngine.executeBlaster(filename);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

CoreEngine.getGlobalTimer().stop();
logger.info(MethodHandles.lookup().lookupClass().getSimpleName() + "
finished. Elapsed time: " + CoreEngine.getGlobalTimer());

You might also like