first commit

This commit is contained in:
2025-07-28 13:56:49 +05:30
commit e9eb805edb
3438 changed files with 520990 additions and 0 deletions

View File

@@ -0,0 +1,223 @@
package net.sf.jasperreports.engine.util;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLStreamHandler;
import java.net.URLStreamHandlerFactory;
import java.util.Locale;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
public class JRResourcesUtil {
private static FileResolver globalFileResolver;
private static ThreadLocalStack localFileResolverStack = new ThreadLocalStack();
private static URLStreamHandlerFactory globalURLHandlerFactory;
private static ThreadLocalStack localURLHandlerFactoryStack = new ThreadLocalStack();
private static ClassLoader globalClassLoader;
private static ThreadLocalStack localClassLoaderStack = new ThreadLocalStack();
public static URL createURL(String spec, URLStreamHandlerFactory urlHandlerFactory) {
URL uRL;
URLStreamHandler handler = getURLHandler(spec, urlHandlerFactory);
try {
if (handler == null) {
uRL = new URL(spec);
} else {
uRL = new URL(null, spec, handler);
}
} catch (MalformedURLException e) {
uRL = null;
}
return uRL;
}
public static URLStreamHandler getURLHandler(String spec, URLStreamHandlerFactory urlHandlerFactory) {
urlHandlerFactory = getURLHandlerFactory(urlHandlerFactory);
URLStreamHandler handler = null;
if (urlHandlerFactory != null) {
String protocol = getURLProtocol(spec);
if (protocol != null)
handler = urlHandlerFactory.createURLStreamHandler(protocol);
}
return handler;
}
private static String getURLProtocol(String spec) {
String protocol = null;
spec = spec.trim();
int colon = spec.indexOf(':');
if (colon > 0) {
String proto = spec.substring(0, colon);
if (protocolValid(proto))
protocol = proto;
}
return protocol;
}
private static boolean protocolValid(String protocol) {
int length = protocol.length();
if (length < 1)
return false;
if (!Character.isLetter(protocol.charAt(0)))
return false;
for (int i = 1; i < length; i++) {
char c = protocol.charAt(i);
if (!Character.isLetterOrDigit(c) && c != '+' && c != '-' && c != '.')
return false;
}
return true;
}
public static FileResolver getFileResolver(FileResolver fileResolver) {
if (fileResolver == null) {
fileResolver = getThreadFileResolver();
if (fileResolver == null)
fileResolver = globalFileResolver;
}
return fileResolver;
}
public static FileResolver getGlobalFileResolver() {
return globalFileResolver;
}
public static FileResolver getThreadFileResolver() {
return (FileResolver)localFileResolverStack.top();
}
public static void setThreadFileResolver(FileResolver fileResolver) {
localFileResolverStack.push(fileResolver);
}
public static void resetThreadFileResolver() {
localFileResolverStack.pop();
}
public static void setGlobalFileResolver(FileResolver fileResolver) {
globalFileResolver = fileResolver;
}
public static File resolveFile(String location, FileResolver fileResolver) {
fileResolver = getFileResolver(fileResolver);
if (fileResolver != null)
return fileResolver.resolveFile(location);
File file = new File(location);
if (file.exists() && file.isFile())
return file;
return null;
}
public static URLStreamHandlerFactory getURLHandlerFactory(URLStreamHandlerFactory urlHandlerFactory) {
if (urlHandlerFactory == null) {
urlHandlerFactory = getThreadURLStreamHandlerFactory();
if (urlHandlerFactory == null)
urlHandlerFactory = globalURLHandlerFactory;
}
return urlHandlerFactory;
}
public static URLStreamHandlerFactory getGlobalURLStreamHandlerFactory() {
return globalURLHandlerFactory;
}
public static URLStreamHandlerFactory getThreadURLStreamHandlerFactory() {
return (URLStreamHandlerFactory)localURLHandlerFactoryStack.top();
}
public static void setThreadURLHandlerFactory(URLStreamHandlerFactory urlHandlerFactory) {
localURLHandlerFactoryStack.push(urlHandlerFactory);
}
public static void resetThreadURLHandlerFactory() {
localURLHandlerFactoryStack.pop();
}
public static void setGlobalURLHandlerFactory(URLStreamHandlerFactory urlHandlerFactory) {
globalURLHandlerFactory = urlHandlerFactory;
}
public static ClassLoader getClassLoader(ClassLoader classLoader) {
if (classLoader == null) {
classLoader = getThreadClassLoader();
if (classLoader == null)
classLoader = globalClassLoader;
}
return classLoader;
}
public static ClassLoader getGlobalClassLoader() {
return globalClassLoader;
}
public static ClassLoader getThreadClassLoader() {
return (ClassLoader)localClassLoaderStack.top();
}
public static void setThreadClassLoader(ClassLoader classLoader) {
localClassLoaderStack.push(classLoader);
}
public static void resetClassLoader() {
localClassLoaderStack.pop();
}
public static void setGlobalClassLoader(ClassLoader classLoader) {
globalClassLoader = classLoader;
}
public static URL findClassLoaderResource(String location, ClassLoader classLoader, Class clazz) {
classLoader = getClassLoader(classLoader);
URL url = null;
if (classLoader != null)
url = classLoader.getResource(location);
if (url == null) {
classLoader = Thread.currentThread().getContextClassLoader();
if (classLoader != null)
url = classLoader.getResource(location);
if (url == null) {
classLoader = clazz.getClassLoader();
if (classLoader == null) {
url = clazz.getResource("/" + location);
} else {
url = classLoader.getResource(location);
}
}
}
return url;
}
public static ResourceBundle loadResourceBundle(String baseName, Locale locale) {
return loadResourceBundle(baseName, locale, null);
}
public static ResourceBundle loadResourceBundle(String baseName, Locale locale, ClassLoader classLoader) {
ResourceBundle resourceBundle = null;
classLoader = getClassLoader(classLoader);
if (classLoader != null)
try {
resourceBundle = ResourceBundle.getBundle(baseName, locale, classLoader);
} catch (MissingResourceException e) {}
if (resourceBundle == null) {
classLoader = Thread.currentThread().getContextClassLoader();
if (classLoader != null)
try {
resourceBundle = ResourceBundle.getBundle(baseName, locale, classLoader);
} catch (MissingResourceException e) {}
}
if (resourceBundle == null) {
classLoader = JRClassLoader.class.getClassLoader();
if (classLoader == null) {
resourceBundle = ResourceBundle.getBundle(baseName, locale);
} else {
resourceBundle = ResourceBundle.getBundle(baseName, locale, classLoader);
}
}
return resourceBundle;
}
}