public void onRegister()

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!");
            }
        }
    }