package liquibase.integration.commandline;
import liquibase.resource.ResourceAccessor;
import liquibase.util.StringUtils;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
/**
* Implementation of liquibase.FileOpener for the command line app.
*
* @see liquibase.resource.ResourceAccessor
*/
public class CommandLineResourceAccessor implements ResourceAccessor {
private ClassLoader loader;
public CommandLineResourceAccessor(ClassLoader loader) {
this.loader = loader;
}
public InputStream getResourceAsStream(String file) throws IOException {
URL resource = loader.getResource(file);
if (resource == null) {
throw new IOException(file + " could not be found");
}
return resource.openStream();
}
public Enumeration<URL> getResources(String packageName) throws IOException {
return loader.getResources(packageName);
}
public ClassLoader toClassLoader() {
return loader;
}
@Override
public String toString() {
String description;
if (loader instanceof URLClassLoader) {
List<String> urls = new ArrayList<String>();
for (URL url : ((URLClassLoader) loader).getURLs()) {
urls.add(url.toExternalForm());
}
description = StringUtils.join(urls, ",");
} else {
description = loader.getClass().getName();
}
return getClass().getName()+"("+ description +")";
}
}