private File getScriptDirectory()

in src/main/java/org/apache/sling/launchpad/webapp/integrationtest/ServerSideScriptsTest.java [100:150]


        private File getScriptDirectory(final String resourcePath) {
            final URL url = ServerSideScriptsTest.class.getClassLoader().getResource(resourcePath);
            if (url != null) {
                if (url.getProtocol().equals("file")) {
                    URI uri = null;
                    try {
                        uri = url.toURI();
                        final File dir = new File(uri);
                        if (dir.exists() && dir.isDirectory()) {
                            return dir;
                        }
                    } catch (final URISyntaxException e) {
                        logger.info("Failed to get scripts from " + url, e);
                        // ignore
                    }
                } else if (url.getProtocol().equals("jar")) {
                    final String urlString = url.toString();
                    final int pos = urlString.indexOf('!');
                    try {
                        final String jarFilePath = urlString.substring(4, pos);
                        final URL jarURL = new URL(jarFilePath);
                        final URI uri = jarURL.toURI();

                        // create a temp dir
                        final File baseDir = new File(System.getProperty("java.io.tmpdir"));

                        final File tempDir = new File(baseDir, System.currentTimeMillis() + ".dir");
                        if (!tempDir.mkdir()) {
                            throw new IllegalStateException("Failed to create temporary directory");
                        }
                        tempDir.deleteOnExit();
                        final Expand expander = new Expand();
                        expander.setDest(tempDir);
                        expander.setSrc(new File(uri));
                        expander.execute();

                        final File dir = new File(tempDir, resourcePath);
                        if (dir.exists() && dir.isDirectory()) {
                            return dir;
                        }
                    } catch (final Exception e) {
                        logger.info("Script path is not readable: " + urlString, e);
                    }
                } else {
                    logger.info("Script path is in unknown url protocol: " + resourcePath + " - " + url);
                }
            } else {
                logger.info("Script path not found " + resourcePath);
            }
            return null;
        }