Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.IOException;
- import java.net.URL;
- import java.util.Enumeration;
- import java.util.HashSet;
- import java.util.ServiceLoader;
- import java.util.Set;
- import java.util.SortedMap;
- import java.util.TreeMap;
- import java.util.regex.Pattern;
- import org.webjars.WebJarAssetLocator;
- import org.webjars.urlprotocols.UrlProtocolHandler;
- public class WasWebJarAssetLocator extends WebJarAssetLocator {
- // WAS webjars protocol (normally is jar)
- private static final String WEBJARS_PROTOCOL = "wsjar";
- // WAS wants resources path trailing slash
- public static final String WEBJARS_PATH_PREFIX = "META-INF/resources/webjars/";
- public WasWebJarAssetLocator() {
- super(getWasFullPathIndex(Pattern.compile(".*"),
- WasWebJarAssetLocator.class.getClassLoader()));
- }
- public static SortedMap<String, String> getWasFullPathIndex(
- final Pattern filterExpr, final ClassLoader... classLoaders) {
- final Set<String> assetPaths = getWasAssetPaths(filterExpr, classLoaders);
- final SortedMap<String, String> assetPathIndex = new TreeMap<String, String>();
- for (final String assetPath : assetPaths) {
- assetPathIndex.put(reverseWasPath(assetPath), assetPath);
- }
- return assetPathIndex;
- }
- private static Set<String> getWasAssetPaths(final Pattern filterExpr, final ClassLoader... classLoaders) {
- final Set<String> assetPaths = new HashSet<String>();
- final Set<URL> urls = listParentWasURLsWithResource(classLoaders, WEBJARS_PATH_PREFIX);
- ServiceLoader<UrlProtocolHandler> urlProtocolHandlers = ServiceLoader.load(UrlProtocolHandler.class);
- for (final URL url : urls) {
- for (UrlProtocolHandler urlProtocolHandler : urlProtocolHandlers) {
- if (WEBJARS_PROTOCOL.equals(url.getProtocol()) || urlProtocolHandler.accepts(url.getProtocol())) {
- Set<String> assetPathSet = urlProtocolHandler.getAssetPaths(url, filterExpr, classLoaders);
- if (assetPathSet != null) {
- assetPaths.addAll(assetPathSet);
- break;
- }
- }
- }
- }
- return assetPaths;
- }
- private static String reverseWasPath(String assetPath) {
- final String[] assetPathComponents = assetPath.split("/");
- final StringBuilder reversedAssetPath = new StringBuilder();
- for (int i = assetPathComponents.length - 1; i >= 0; --i) {
- reversedAssetPath.append(assetPathComponents[i]);
- reversedAssetPath.append('/');
- }
- return reversedAssetPath.toString();
- }
- private static Set<URL> listParentWasURLsWithResource(final ClassLoader[] classLoaders, final String resource) {
- final Set<URL> urls = new HashSet<URL>();
- for (final ClassLoader classLoader : classLoaders) {
- try {
- final Enumeration<URL> enumeration = classLoader.getResources(resource);
- while (enumeration.hasMoreElements()) {
- urls.add(enumeration.nextElement());
- }
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
- }
- return urls;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement