/* * ****************************************************************************** * Copyright (c) 2013 JavaTIC. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Yann Le Moigne - initial API and implementation * ***************************************************************************** */ package fr.javatic.vertx.webjar; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import org.vertx.java.core.AsyncResult; import org.vertx.java.core.AsyncResultHandler; import org.vertx.java.core.Future; import org.vertx.java.core.Handler; import org.vertx.java.core.buffer.Buffer; import org.vertx.java.core.eventbus.EventBus; import org.vertx.java.core.eventbus.Message; import org.vertx.java.core.file.FileSystem; import org.vertx.java.core.json.JsonObject; import org.vertx.java.platform.Verticle; import fr.javatic.vertx.webjar.puller.WebjarPullerVerticle; public class WebjarVerticle extends Verticle { public final static String WEBJAR_ADDRESS = "module.webjar.resourceRequest"; private Map<String, String> mapPathContent; private FileSystem fileSystem; private EventBus eventBus; private JsonObject config; @Override public void start(final Future<Void> startedResult) { fileSystem = vertx.fileSystem(); eventBus = vertx.eventBus(); config = container.config(); mapPathContent = new ConcurrentHashMap<>(); registerOnEventBus(); boolean pullInOnStartup = config.getBoolean(WebjarModuleConfig.PULLIN_ON_STARTUP, WebjarModuleConfig.PULLIN_ON_STARTUP_DEFAULT); if (pullInOnStartup) { container.deployWorkerVerticle(WebjarPullerVerticle.class.getName(), config, 1, false, new AsyncResultHandler<String>() { @Override public void handle(AsyncResult<String> event) { if (event.failed()) { startedResult.setFailure(event.cause()); } loadWebjars(); startedResult.setResult(null); } }); } else { loadWebjars(); startedResult.setResult(null); } } private void registerOnEventBus() { eventBus.registerHandler(WEBJAR_ADDRESS, new Handler<Message>() { @Override public void handle(Message event) { String path = (String) event.body(); String content = mapPathContent.get(path); event.reply(content); } }); } private void loadWebjars() { final String webjarsDirectoryPath = config.getString(WebjarModuleConfig.WEBJARS_DIR_PATH, WebjarModuleConfig.WEBJARS_DIR_PATH_DEFAULT); String[] webjarsPaths = fileSystem.readDirSync(webjarsDirectoryPath); for (String webjarPath : webjarsPaths) { loadWebjar(webjarPath); } } private void loadWebjar(final String webjarPath) { Buffer buffer = fileSystem.readFileSync(webjarPath); Webjar webJar = new Webjar(buffer); for (String path : webJar.getPaths()) { mapPathContent.put(path, webJar.getContent(path)); } } }