blob: fe13a5b0e97becbf055013034ca02e741e4b8906 [file] [log] [blame]
//
// ========================================================================
// Copyright (c) 1995-2015 Mort Bay Consulting Pty. Ltd.
// ------------------------------------------------------------------------
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v1.0
// and Apache License v2.0 which accompanies this distribution.
//
// The Eclipse Public License is available at
// http://www.eclipse.org/legal/epl-v10.html
//
// The Apache License v2.0 is available at
// http://www.opensource.org/licenses/apache2.0.php
//
// You may elect to redistribute this code under either of these licenses.
// ========================================================================
//
package org.eclipse.jetty.util;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jetty.util.PathWatcher.PathWatchEvent;
import org.eclipse.jetty.util.log.Log;
import org.eclipse.jetty.util.log.Logger;
public class PathWatcherDemo implements PathWatcher.Listener
{
private static final Logger LOG = Log.getLogger(PathWatcherDemo.class);
public static void main(String[] args)
{
List<Path> paths = new ArrayList<>();
for (String arg : args)
{
paths.add(new File(arg).toPath());
}
if (paths.isEmpty())
{
LOG.warn("No paths specified on command line");
System.exit(-1);
}
PathWatcherDemo demo = new PathWatcherDemo();
try
{
demo.run(paths);
}
catch (Throwable t)
{
LOG.warn(t);
}
}
public void run(List<Path> paths) throws Exception
{
PathWatcher watcher = new PathWatcher();
//watcher.addListener(new PathWatcherDemo());
watcher.addListener (new PathWatcher.EventListListener(){
@Override
public void onPathWatchEvents(List<PathWatchEvent> events)
{
if (events == null)
LOG.warn("Null events received");
if (events.isEmpty())
LOG.warn("Empty events received");
LOG.info("Bulk notification received");
for (PathWatchEvent e:events)
onPathWatchEvent(e);
}
});
watcher.setNotifyExistingOnStart(false);
List<String> excludes = new ArrayList<>();
excludes.add("glob:*.bak"); // ignore backup files
excludes.add("regex:^.*/\\~[^/]*$"); // ignore scratch files
for (Path path : paths)
{
if (Files.isDirectory(path))
{
PathWatcher.Config config = new PathWatcher.Config(path);
config.addExcludeHidden();
config.addExcludes(excludes);
config.setRecurseDepth(4);
watcher.watch(config);
}
else
{
watcher.watch(path);
}
}
watcher.start();
Thread.currentThread().join();
}
@Override
public void onPathWatchEvent(PathWatchEvent event)
{
StringBuilder msg = new StringBuilder();
msg.append("onPathWatchEvent: [");
msg.append(event.getType());
msg.append("] ");
msg.append(event.getPath());
msg.append(" (count=").append(event.getCount()).append(")");
if (Files.isRegularFile(event.getPath()))
{
try
{
String fsize = String.format(" (filesize=%,d)",Files.size(event.getPath()));
msg.append(fsize);
}
catch (IOException e)
{
LOG.warn("Unable to get filesize",e);
}
}
LOG.info("{}",msg.toString());
}
}