All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.opensymphony.xwork2.util.finder.UrlSet Maven / Gradle / Ivy

Go to download

XWork is an command-pattern framework that is used to power WebWork as well as other applications. XWork provides an Inversion of Control container, a powerful expression language, data type conversion, validation, and pluggable configuration.

There is a newer version: 2.1.3
Show newest version
/**
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */
package com.opensymphony.xwork2.util.finder;

import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.*;

/**
 * Use with ClassFinder to filter the Urls to be scanned, example:
 * 
 * UrlSet urlSet = new UrlSet(classLoader);
 * urlSet = urlSet.exclude(ClassLoader.getSystemClassLoader().getParent());
 * urlSet = urlSet.excludeJavaExtDirs();
 * urlSet = urlSet.excludeJavaEndorsedDirs();
 * urlSet = urlSet.excludeJavaHome();
 * urlSet = urlSet.excludePaths(System.getProperty("sun.boot.class.path", ""));
 * urlSet = urlSet.exclude(".*?/JavaVM.framework/.*");
 * urlSet = urlSet.exclude(".*?/activemq-(core|ra)-[\\d.]+.jar(!/)?");
 * 
* @author David Blevins * @version $Rev$ $Date$ */ public class UrlSet { private final Map urls; public UrlSet(ClassLoader classLoader) throws IOException { this(getUrls(classLoader)); } public UrlSet(URL... urls){ this(Arrays.asList(urls)); } /** * Ignores all URLs that are not "jar" or "file" * @param urls */ public UrlSet(Collection urls){ this.urls = new HashMap(); for (URL location : urls) { try { // if (location.getProtocol().equals("file")) { // try { // // See if it's actually a jar // URL jarUrl = new URL("jar", "", location.toExternalForm() + "!/"); // JarURLConnection juc = (JarURLConnection) jarUrl.openConnection(); // juc.getJarFile(); // location = jarUrl; // } catch (IOException e) { // } // this.urls.put(location.toExternalForm(), location); // } this.urls.put(location.toExternalForm(), location); } catch (Exception e) { e.printStackTrace(); } } } private UrlSet(Map urls) { this.urls = urls; } public UrlSet include(UrlSet urlSet){ Map urls = new HashMap(this.urls); urls.putAll(urlSet.urls); return new UrlSet(urls); } public UrlSet exclude(UrlSet urlSet) { Map urls = new HashMap(this.urls); Map parentUrls = urlSet.urls; for (String url : parentUrls.keySet()) { urls.remove(url); } return new UrlSet(urls); } public UrlSet exclude(ClassLoader parent) throws IOException { return exclude(new UrlSet(parent)); } public UrlSet exclude(File file) throws MalformedURLException { return exclude(relative(file)); } public UrlSet exclude(String pattern) throws MalformedURLException { return exclude(matching(pattern)); } /** * Calls excludePaths(System.getProperty("java.ext.dirs")) * @return * @throws MalformedURLException */ public UrlSet excludeJavaExtDirs() throws MalformedURLException { return excludePaths(System.getProperty("java.ext.dirs", "")); } /** * Calls excludePaths(System.getProperty("java.endorsed.dirs")) * * @return * @throws MalformedURLException */ public UrlSet excludeJavaEndorsedDirs() throws MalformedURLException { return excludePaths(System.getProperty("java.endorsed.dirs", "")); } public UrlSet excludeJavaHome() throws MalformedURLException { String path = System.getProperty("java.home"); File java = new File(path); if (path.matches("/System/Library/Frameworks/JavaVM.framework/Versions/[^/]+/Home")){ java = java.getParentFile(); } return exclude(java); } public UrlSet excludePaths(String pathString) throws MalformedURLException { String[] paths = pathString.split(File.pathSeparator); UrlSet urlSet = this; for (String path : paths) { File file = new File(path); urlSet = urlSet.exclude(file); } return urlSet; } public UrlSet matching(String pattern) { Map urls = new HashMap(); for (Map.Entry entry : this.urls.entrySet()) { String url = entry.getKey(); if (url.matches(pattern)){ urls.put(url, entry.getValue()); } } return new UrlSet(urls); } public UrlSet relative(File file) throws MalformedURLException { String urlPath = file.toURL().toExternalForm(); Map urls = new HashMap(); for (Map.Entry entry : this.urls.entrySet()) { String url = entry.getKey(); if (url.startsWith(urlPath) || url.startsWith("jar:"+urlPath)){ urls.put(url, entry.getValue()); } } return new UrlSet(urls); } public List getUrls() { return new ArrayList(urls.values()); } private static List getUrls(ClassLoader classLoader) throws IOException { List list = new ArrayList(); ArrayList urls = Collections.list(classLoader.getResources("META-INF")); for (URL url : urls) { String externalForm = url.toExternalForm(); int i = externalForm.lastIndexOf("META-INF"); externalForm = externalForm.substring(0, i); url = new URL(externalForm); list.add(url); } list.addAll(Collections.list(classLoader.getResources(""))); return list; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy