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;
}