in services/minho-extractor/src/main/java/org/apache/karaf/minho/extractor/ExtractorService.java [38:85]
public void onRegister(ServiceRegistry serviceRegistry) throws Exception {
log.info("Starting extractor service");
// looking for extractor configuration
Config config = serviceRegistry.get(Config.class);
if (config == null) {
log.warning("Config service is not registered");
return;
}
String sources = "resources";
if (config.getProperty("extractor.sources") != null) {
sources = config.getProperty("extractor.sources").toString();
}
String target = ".";
if (config.getProperty("extractor.target") != null) {
target = config.getProperty("extractor.target").toString();
}
String[] urls = sources.split(",");
for (String url : urls) {
log.info("Extracting " + url + " to " + target);
URL resource = Thread.currentThread().getContextClassLoader().getResource(url);
if (resource != null) {
try (FileSystem fs = FileSystems.newFileSystem(resource.toURI(), Collections.emptyMap())) {
String finalTarget = target;
Files.walk(fs.getPath(".")).filter(Files::isRegularFile)
.forEach(path -> {
try {
String resourceTarget = path.getParent().toAbsolutePath().toString();
if (resourceTarget.startsWith("/" + url)) {
resourceTarget = resourceTarget.substring(("/" + url).length());
Path directory = Paths.get(finalTarget + Paths.get(resourceTarget));
Files.createDirectories(directory);
Path copy = Paths.get(directory.toAbsolutePath() + "/" + path.getFileName());
Files.copy(path, copy, StandardCopyOption.REPLACE_EXISTING);
}
} catch (Exception e) {
log.warning("Can't copy " + path.toAbsolutePath() + " to " + finalTarget);
e.printStackTrace();
}
});
}
} else {
log.warning("URL resource '" + url + "' not found!");
}
}
}