use of java.nio.file.WatchService in project meecrowave by apache.
the class JBake method main.
// if you want to switch off PDF generation use as arguments: src/main/jbake target/site-tmp true false
public static void main(final String[] args) throws Exception {
// try to have parallelStream better than default
System.setProperty("java.util.concurrent.ForkJoinPool.common.parallelism", "64");
final File source = args == null || args.length < 1 ? new File("src/main/jbake") : new File(args[0]);
final File pdfSource = new File(source, "content");
final File destination = args == null || args.length < 2 ? new File("target/site-tmp") : new File(args[1]);
// by default we dev
final boolean startHttp = args == null || args.length < 2 || Boolean.parseBoolean(args[2]);
// by default...too slow sorry
final boolean skipPdf = args != null && args.length > 3 && !Boolean.parseBoolean(args[3]);
// grabs central
final boolean updateDownloads = args != null && args.length > 4 && Boolean.parseBoolean(args[4]);
// generation of dynamic content
new Configuration().run();
new CliConfiguration().run();
new ArquillianConfiguration().run();
new MavenConfiguration().run();
new OAuth2Configuration().run();
new LetsEncryptConfiguration().run();
new GradleConfiguration().run();
new ProxyConfiguration().run();
if (updateDownloads) {
final ByteArrayOutputStream tableContent = new ByteArrayOutputStream();
try (final PrintStream stream = new PrintStream(tableContent)) {
Downloads.doMain(stream);
}
try (final Writer writer = new FileWriter(new File(source, "content/download.adoc"))) {
writer.write("= Downloads\n" + ":jbake-generated: true\n" + ":jbake-date: 2017-07-24\n" + ":jbake-type: page\n" + ":jbake-status: published\n" + ":jbake-meecrowavepdf:\n" + ":jbake-meecrowavecolor: body-blue\n" + ":icons: font\n" + "\n" + "License under Apache License v2 (ALv2).\n" + "\n" + "[.table.table-bordered,options=\"header\"]\n" + "|===\n" + "|Name|Version|Date|Size|Type|Links\n");
writer.write(new String(tableContent.toByteArray(), StandardCharsets.UTF_8));
writer.write("\n|===\n");
}
}
final Runnable build = () -> {
System.out.println("Building Meecrowave website in " + destination);
final Orient orient = Orient.instance();
try {
final Oven oven = new Oven(new JBakeConfigurationFactory().createDefaultJbakeConfiguration(source, destination, new CompositeConfiguration() {
{
final CompositeConfiguration config = new CompositeConfiguration();
config.addConfiguration(new MapConfiguration(new HashMap<String, Object>() {
{
put("asciidoctor.attributes", new ArrayList<String>() {
{
add("source-highlighter=highlightjs");
add("highlightjs-theme=idea");
add("context_rootpath=/meecrowave");
add("icons=font");
}
});
}
}));
config.addConfiguration(DefaultJBakeConfiguration.class.cast(new ConfigUtil().loadConfig(source)).getCompositeConfiguration());
addConfiguration(config);
}
}, true));
System.out.println(" > baking");
oven.bake();
if (!skipPdf) {
System.out.println(" > pdfifying");
PDFify.generatePdf(pdfSource, destination);
}
System.out.println(" > done :)");
} catch (final Exception e) {
e.printStackTrace();
} finally {
orient.shutdown();
}
};
build.run();
if (startHttp) {
final Path watched = source.toPath();
final WatchService watchService = watched.getFileSystem().newWatchService();
watched.register(watchService, ENTRY_CREATE, ENTRY_DELETE, ENTRY_MODIFY);
final AtomicBoolean run = new AtomicBoolean(true);
final AtomicLong render = new AtomicLong(-1);
final Thread renderingThread = new Thread() {
{
setName("jbake-renderer");
}
@Override
public void run() {
long last = System.currentTimeMillis();
while (run.get()) {
if (render.get() > last) {
last = System.currentTimeMillis();
try {
build.run();
} catch (final Throwable oops) {
oops.printStackTrace();
}
}
try {
sleep(TimeUnit.SECONDS.toMillis(1));
} catch (final InterruptedException e) {
Thread.currentThread().interrupt();
break;
}
}
System.out.println("Exiting renderer");
}
};
final Thread watcherThread = new Thread() {
{
setName("jbake-file-watcher");
}
@Override
public void run() {
while (run.get()) {
try {
final WatchKey key = watchService.poll(1, TimeUnit.SECONDS);
if (key == null) {
continue;
}
for (final WatchEvent<?> event : key.pollEvents()) {
final WatchEvent.Kind<?> kind = event.kind();
if (kind != ENTRY_CREATE && kind != ENTRY_DELETE && kind != ENTRY_MODIFY) {
// unlikely but better to protect ourself
continue;
}
final Path updatedPath = Path.class.cast(event.context());
if (kind == ENTRY_DELETE || updatedPath.toFile().isFile()) {
final String path = updatedPath.toString();
if (!path.contains("___jb") && !path.endsWith("~")) {
render.set(System.currentTimeMillis());
}
}
}
key.reset();
} catch (final InterruptedException e) {
Thread.currentThread().interrupt();
run.compareAndSet(true, false);
} catch (final ClosedWatchServiceException cwse) {
if (!run.get()) {
throw new IllegalStateException(cwse);
}
}
}
System.out.println("Exiting file watcher");
}
};
renderingThread.start();
watcherThread.start();
final Runnable onQuit = () -> {
run.compareAndSet(true, false);
Stream.of(watcherThread, renderingThread).forEach(thread -> {
try {
thread.join();
} catch (final InterruptedException e) {
Thread.currentThread().interrupt();
}
});
try {
watchService.close();
} catch (final IOException ioe) {
// not important
}
};
try (final Meecrowave container = new Meecrowave(new Meecrowave.Builder() {
{
setWebResourceCached(false);
property("proxy-skip", "true");
}
}) {
{
start();
getTomcat().getServer().setParentClassLoader(Thread.currentThread().getContextClassLoader());
deployWebapp("/meecrowave", destination);
}
}) {
System.out.println("Started on http://localhost:" + container.getConfiguration().getHttpPort() + "/meecrowave");
final Scanner console = new Scanner(System.in);
String cmd;
while (((cmd = console.nextLine())) != null) {
if ("quit".equals(cmd)) {
break;
} else if ("r".equals(cmd) || "rebuild".equals(cmd) || "build".equals(cmd) || "b".equals(cmd)) {
render.set(System.currentTimeMillis());
} else {
System.err.println("Ignoring " + cmd + ", please use 'build' or 'quit'");
}
}
}
onQuit.run();
}
}
use of java.nio.file.WatchService in project atlasmap by atlasmap.
the class E2ETest method test.
@Test
public void test() throws Exception {
driver.get("http://127.0.0.1:" + port);
WebDriverWait waitForLoad = new WebDriverWait(driver, Duration.ofSeconds(30));
waitForLoad.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//article[@aria-label='Properties']")));
WebElement atlasmapMenuBtn = driver.findElement(By.xpath("//button[@data-testid='atlasmap-menu-button']"));
atlasmapMenuBtn.click();
waitForLoad.until(ExpectedConditions.elementToBeClickable(By.xpath("//a[@data-testid='import-mappings-button']")));
WebElement importBtn = driver.findElement(By.xpath("//a[@data-testid='import-mappings-button']"));
importBtn.click();
WebElement fileInput = driver.findElement(By.xpath("//div[@id='data-toolbar']//input[@type='file']"));
String cwd = System.getProperty("user.dir");
fileInput.sendKeys(cwd + "/src/test/resources/json-schema-source-to-xml-schema-target.adm");
WebElement confirmBtn = driver.findElement(By.xpath("//button[@data-testid='confirmation-dialog-confirm-button']"));
confirmBtn.click();
waitForLoad.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//article[@aria-label='JSONSchemaSource']")));
try {
Thread.sleep(1000);
} catch (InterruptedException e1) {
}
// Check custom action param
WebElement orderBtn = driver.findElement(By.xpath("//button[@id='sources-field-atlas:json:JSONSchemaSource:source:/order-toggle']"));
orderBtn.click();
By addressToggle = By.xpath("//button[@id='sources-field-atlas:json:JSONSchemaSource:source:/order/address-toggle']");
waitForLoad.until(ExpectedConditions.visibilityOfElementLocated(addressToggle));
WebElement addrBtn = driver.findElement(addressToggle);
addrBtn.click();
By addrDivPath = By.xpath("//button[@id='sources-field-atlas:json:JSONSchemaSource:source:/order/address-toggle']/../..");
waitForLoad.until(ExpectedConditions.visibilityOfElementLocated(addrDivPath));
WebElement addrDiv = driver.findElement(addrDivPath);
By cityDivPath = By.xpath(".//button[@data-testid='grip-city-button']/../../../..");
waitForLoad.until(ExpectedConditions.visibilityOfElementLocated(cityDivPath));
WebElement cityDiv = addrDiv.findElement(cityDivPath);
Actions action = new Actions(driver);
action.moveToElement(cityDiv).perform();
waitForLoad.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//button[@data-testid='show-mapping-details-button']")));
WebElement showDetailsBtn = cityDiv.findElement(By.xpath(".//button[@data-testid='show-mapping-details-button']"));
showDetailsBtn.click();
WebElement detailsCity = waitForLoad.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@role='dialog']//div[@aria-labelledby='mapping-field-city']")));
assertNotNull(detailsCity);
WebElement customActionParamInput = driver.findElement(By.id("user-field-action-io.atlasmap.service.my.MyFieldActionsModel-transformation-0"));
assertEquals("testparam", customActionParamInput.getAttribute("value"));
// Check custom source class mapping
WebElement customClassDoc = driver.findElement(By.xpath("//article[@aria-label='MyFieldActionsModel']"));
WebElement paramDiv = customClassDoc.findElement(By.xpath(".//button[@data-testid='grip-param-button']/../../../.."));
action = new Actions(driver);
action.moveToElement(paramDiv).perform();
waitForLoad.until(ExpectedConditions.elementToBeClickable(By.xpath("//button[@data-testid='show-mapping-details-button']")));
showDetailsBtn = paramDiv.findElement(By.xpath(".//button[@data-testid='show-mapping-details-button']"));
showDetailsBtn.click();
WebElement detailsPhotoUrl = waitForLoad.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@data-testid='column-mapping-details-area']" + "//div[@data-testid='mapping-field-photoUrl']")));
assertNotNull(detailsPhotoUrl);
atlasmapMenuBtn = driver.findElement(By.xpath("//button[@data-testid='atlasmap-menu-button']"));
atlasmapMenuBtn.click();
waitForLoad.until(ExpectedConditions.elementToBeClickable(By.xpath("//a[@data-testid='export-mappings-button']")));
WebElement exportBtn = driver.findElement(By.xpath("//a[@data-testid='export-mappings-button']"));
exportBtn.click();
WebElement dialogDiv = driver.findElement(By.xpath("//div[@data-testid='export-catalog-dialog']/.."));
WebElement exportInput = dialogDiv.findElement(By.id("filename"));
String exportAdmFileName = UUID.randomUUID().toString() + "-exported.adm";
exportInput.clear();
exportInput.sendKeys(exportAdmFileName);
confirmBtn = dialogDiv.findElement(By.xpath(".//button[@data-testid='confirmation-dialog-confirm-button']"));
WatchService watcher = FileSystems.getDefault().newWatchService();
Executors.newSingleThreadExecutor().execute(() -> {
long start = System.currentTimeMillis();
while ((System.currentTimeMillis() - start) < 300000) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
break;
}
}
try {
watcher.close();
} catch (Exception e) {
fail("Failed to close file watcher");
}
});
Path dirPath = Paths.get(DLDIR);
dirPath.register(watcher, StandardWatchEventKinds.ENTRY_CREATE);
confirmBtn.click();
WatchKey key = watcher.take();
while (key.isValid()) {
List<WatchEvent<?>> events = key.pollEvents();
if (events.isEmpty()) {
Thread.sleep(1000);
continue;
}
for (WatchEvent<?> event : events) {
if (!StandardWatchEventKinds.ENTRY_CREATE.name().equals(event.kind().name())) {
continue;
}
;
Path eventPath = (Path) event.context();
LOG.info("File '{}' is created", eventPath.getFileName().toString());
if (!exportAdmFileName.equals(eventPath.getFileName().toString())) {
continue;
}
ADMArchiveHandler handler = new ADMArchiveHandler(getClass().getClassLoader());
handler.setLibraryDirectory(Paths.get(DLDIR + File.separator + "lib"));
handler.load(Paths.get(DLDIR + File.separator + exportAdmFileName));
assertEquals("UI.0", handler.getMappingDefinition().getName());
DataSourceMetadata sourceMeta = handler.getDataSourceMetadata(true, "JSONSchemaSource");
assertEquals(true, sourceMeta.getIsSource());
assertEquals("JSONSchemaSource", sourceMeta.getName());
assertEquals("JSON", sourceMeta.getDataSourceType());
DataSourceMetadata targetMeta = handler.getDataSourceMetadata(false, "XMLSchemaSource");
assertEquals(false, targetMeta.getIsSource());
assertEquals("XMLSchemaSource", targetMeta.getName());
assertEquals("XML", targetMeta.getDataSourceType());
return;
}
;
}
fail("exported.adm was not created");
}
use of java.nio.file.WatchService in project spf4j by zolyfarkas.
the class TSDBReader method watch.
// CHECKSTYLE:OFF
@SuppressFBWarnings("NOS_NON_OWNED_SYNCHRONIZATION")
public <E extends Exception> void watch(final Handler<Either<TableDef, DataBlock>, E> handler, final EventSensitivity es, final long deadlineNanos) throws IOException, InterruptedException, E {
// CHECKSTYLE:ON
synchronized (this) {
if (watch) {
throw new IllegalStateException("File is already watched " + file);
}
watch = true;
}
SensitivityWatchEventModifier sensitivity;
switch(es) {
case LOW:
sensitivity = SensitivityWatchEventModifier.LOW;
break;
case MEDIUM:
sensitivity = SensitivityWatchEventModifier.MEDIUM;
break;
case HIGH:
sensitivity = SensitivityWatchEventModifier.HIGH;
break;
default:
throw new UnsupportedOperationException("Unsupported sensitivity " + es);
}
final Path path = file.getParentFile().toPath();
try (WatchService watchService = path.getFileSystem().newWatchService()) {
path.register(watchService, new WatchEvent.Kind[] { StandardWatchEventKinds.ENTRY_MODIFY, StandardWatchEventKinds.OVERFLOW }, sensitivity);
readAll(handler, deadlineNanos);
do {
long tNanos = deadlineNanos - TimeSource.nanoTime();
if (tNanos <= 0) {
break;
}
WatchKey key = watchService.poll(1, TimeUnit.SECONDS);
if (key == null) {
if (reReadSize()) {
readAll(handler, deadlineNanos);
}
continue;
}
if (!key.isValid()) {
key.cancel();
break;
}
if (!key.pollEvents().isEmpty() && reReadSize()) {
readAll(handler, deadlineNanos);
}
if (!key.reset()) {
key.cancel();
break;
}
} while (watch);
} finally {
watch = false;
}
}
use of java.nio.file.WatchService in project jbosstools-openshift by jbosstools.
the class ConfigWatcher method runOnConfigChange.
private void runOnConfigChange(Runnable runnable) {
try (WatchService service = newWatchService()) {
registerWatchService(service);
WatchKey key;
while ((key = service.take()) != null) {
key.pollEvents().stream().filter(this::isConfigPath).forEach((Void) -> runnable.run());
key.reset();
}
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
use of java.nio.file.WatchService in project Java-Tutorial by gpcodervn.
the class DirectoryWatchExample method main.
public static void main(String[] args) throws IOException {
WatchService watcher = FileSystems.getDefault().newWatchService();
Path dir = Paths.get("C:/uploads");
dir.register(watcher, StandardWatchEventKinds.ENTRY_CREATE, StandardWatchEventKinds.ENTRY_DELETE, StandardWatchEventKinds.ENTRY_MODIFY);
System.out.println("Watch Service registered for dir: " + dir.getFileName());
WatchKey key = null;
while (true) {
try {
// System.out.println("Waiting for key to be signalled...");
key = watcher.take();
} catch (InterruptedException ex) {
System.out.println("InterruptedException: " + ex.getMessage());
return;
}
for (WatchEvent<?> event : key.pollEvents()) {
// Retrieve the type of event by using the kind() method.
WatchEvent.Kind<?> kind = event.kind();
WatchEvent<Path> ev = (WatchEvent<Path>) event;
Path fileName = ev.context();
if (kind == StandardWatchEventKinds.ENTRY_CREATE) {
System.out.printf("A new file %s was created.%n", fileName.getFileName());
} else if (kind == StandardWatchEventKinds.ENTRY_MODIFY) {
System.out.printf("A file %s was modified.%n", fileName.getFileName());
} else if (kind == StandardWatchEventKinds.ENTRY_DELETE) {
System.out.printf("A file %s was deleted.%n", fileName.getFileName());
}
}
boolean valid = key.reset();
if (!valid) {
break;
}
}
}
Aggregations