📄 introspectionutils.java
字号:
if ("setProperty".equals(methods[i].getName())) {
setPropertyMethod = methods[i];
}
}
// Ok, no setXXX found, try a setProperty("name", "value")
if (setPropertyMethod != null) {
Object params[] = new Object[2];
params[0] = name;
params[1] = value;
setPropertyMethod.invoke(o, params);
}
} catch (IllegalArgumentException ex2) {
log.warn("IAE " + o + " " + name + " " + value, ex2);
} catch (SecurityException ex1) {
if (dbg > 0)
d("SecurityException for " + o.getClass() + " " + name + "="
+ value + ")");
if (dbg > 1)
ex1.printStackTrace();
} catch (IllegalAccessException iae) {
if (dbg > 0)
d("IllegalAccessException for " + o.getClass() + " " + name
+ "=" + value + ")");
if (dbg > 1)
iae.printStackTrace();
} catch (InvocationTargetException ie) {
if (dbg > 0)
d("InvocationTargetException for " + o.getClass() + " " + name
+ "=" + value + ")");
if (dbg > 1)
ie.printStackTrace();
}
}
public static Object getProperty(Object o, String name) {
String getter = "get" + capitalize(name);
String isGetter = "is" + capitalize(name);
try {
Method methods[] = findMethods(o.getClass());
Method getPropertyMethod = null;
// First, the ideal case - a getFoo() method
for (int i = 0; i < methods.length; i++) {
Class paramT[] = methods[i].getParameterTypes();
if (getter.equals(methods[i].getName()) && paramT.length == 0) {
return methods[i].invoke(o, (Object[]) null);
}
if (isGetter.equals(methods[i].getName()) && paramT.length == 0) {
return methods[i].invoke(o, (Object[]) null);
}
if ("getProperty".equals(methods[i].getName())) {
getPropertyMethod = methods[i];
}
}
// Ok, no setXXX found, try a getProperty("name")
if (getPropertyMethod != null) {
Object params[] = new Object[1];
params[0] = name;
return getPropertyMethod.invoke(o, params);
}
} catch (IllegalArgumentException ex2) {
log.warn("IAE " + o + " " + name, ex2);
} catch (SecurityException ex1) {
if (dbg > 0)
d("SecurityException for " + o.getClass() + " " + name + ")");
if (dbg > 1)
ex1.printStackTrace();
} catch (IllegalAccessException iae) {
if (dbg > 0)
d("IllegalAccessException for " + o.getClass() + " " + name
+ ")");
if (dbg > 1)
iae.printStackTrace();
} catch (InvocationTargetException ie) {
if (dbg > 0)
d("InvocationTargetException for " + o.getClass() + " " + name
+ ")");
if (dbg > 1)
ie.printStackTrace();
}
return null;
}
/**
*/
public static void setProperty(Object o, String name) {
String setter = "set" + capitalize(name);
try {
Method methods[] = findMethods(o.getClass());
Method setPropertyMethod = null;
// find setFoo() method
for (int i = 0; i < methods.length; i++) {
Class paramT[] = methods[i].getParameterTypes();
if (setter.equals(methods[i].getName()) && paramT.length == 0) {
methods[i].invoke(o, new Object[] {});
return;
}
}
} catch (Exception ex1) {
if (dbg > 0)
d("Exception for " + o.getClass() + " " + name);
if (dbg > 1)
ex1.printStackTrace();
}
}
/**
* Replace ${NAME} with the property value
*
* @deprecated Use the explicit method
*/
public static String replaceProperties(String value, Object getter) {
if (getter instanceof Hashtable)
return replaceProperties(value, (Hashtable) getter, null);
if (getter instanceof PropertySource) {
PropertySource src[] = new PropertySource[] { (PropertySource) getter };
return replaceProperties(value, null, src);
}
return value;
}
/**
* Replace ${NAME} with the property value
*/
public static String replaceProperties(String value, Hashtable staticProp,
PropertySource dynamicProp[]) {
StringBuffer sb = new StringBuffer();
int prev = 0;
// assert value!=nil
int pos;
while ((pos = value.indexOf("$", prev)) >= 0) {
if (pos > 0) {
sb.append(value.substring(prev, pos));
}
if (pos == (value.length() - 1)) {
sb.append('$');
prev = pos + 1;
} else if (value.charAt(pos + 1) != '{') {
sb.append('$');
prev = pos + 1; // XXX
} else {
int endName = value.indexOf('}', pos);
if (endName < 0) {
sb.append(value.substring(pos));
prev = value.length();
continue;
}
String n = value.substring(pos + 2, endName);
String v = null;
if (staticProp != null) {
v = (String) ((Hashtable) staticProp).get(n);
}
if (v == null && dynamicProp != null) {
for (int i = 0; i < dynamicProp.length; i++) {
v = dynamicProp[i].getProperty(n);
if (v != null) {
break;
}
}
}
if (v == null)
v = "${" + n + "}";
sb.append(v);
prev = endName + 1;
}
}
if (prev < value.length())
sb.append(value.substring(prev));
return sb.toString();
}
/**
* Reverse of Introspector.decapitalize
*/
public static String capitalize(String name) {
if (name == null || name.length() == 0) {
return name;
}
char chars[] = name.toCharArray();
chars[0] = Character.toUpperCase(chars[0]);
return new String(chars);
}
public static String unCapitalize(String name) {
if (name == null || name.length() == 0) {
return name;
}
char chars[] = name.toCharArray();
chars[0] = Character.toLowerCase(chars[0]);
return new String(chars);
}
// -------------------- Class path tools --------------------
/**
* Add all the jar files in a dir to the classpath, represented as a Vector
* of URLs.
*/
public static void addToClassPath(Vector cpV, String dir) {
try {
String cpComp[] = getFilesByExt(dir, ".jar");
if (cpComp != null) {
int jarCount = cpComp.length;
for (int i = 0; i < jarCount; i++) {
URL url = getURL(dir, cpComp[i]);
if (url != null)
cpV.addElement(url);
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
public static void addToolsJar(Vector v) {
try {
// Add tools.jar in any case
File f = new File(System.getProperty("java.home")
+ "/../lib/tools.jar");
if (!f.exists()) {
// On some systems java.home gets set to the root of jdk.
// That's a bug, but we can work around and be nice.
f = new File(System.getProperty("java.home") + "/lib/tools.jar");
if (f.exists()) {
if (log.isDebugEnabled())
log.debug("Detected strange java.home value "
+ System.getProperty("java.home")
+ ", it should point to jre");
}
}
URL url = new URL("file", "", f.getAbsolutePath());
v.addElement(url);
} catch (MalformedURLException ex) {
ex.printStackTrace();
}
}
/**
* Return all files with a given extension in a dir
*/
public static String[] getFilesByExt(String ld, String ext) {
File dir = new File(ld);
String[] names = null;
final String lext = ext;
if (dir.isDirectory()) {
names = dir.list(new FilenameFilter() {
public boolean accept(File d, String name) {
if (name.endsWith(lext)) {
return true;
}
return false;
}
});
}
return names;
}
/**
* Construct a file url from a file, using a base dir
*/
public static URL getURL(String base, String file) {
try {
File baseF = new File(base);
File f = new File(baseF, file);
String path = f.getCanonicalPath();
if (f.isDirectory()) {
path += "/";
}
if (!f.exists())
return null;
return new URL("file", "", path);
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
}
/**
* Add elements from the classpath <i>cp </i> to a Vector <i>jars </i> as
* file URLs (We use Vector for JDK 1.1 compat).
* <p>
*
* @param jars The jar list
* @param cp a String classpath of directory or jar file elements
* separated by path.separator delimiters.
* @throws IOException If an I/O error occurs
* @throws MalformedURLException Doh ;)
*/
public static void addJarsFromClassPath(Vector jars, String cp)
throws IOException, MalformedURLException {
String sep = System.getProperty("path.separator");
String token;
StringTokenizer st;
if (cp != null) {
st = new StringTokenizer(cp, sep);
while (st.hasMoreTokens()) {
File f = new File(st.nextToken());
String path = f.getCanonicalPath();
if (f.isDirectory()) {
path += "/";
}
URL url = new URL("file", "", path);
if (!jars.contains(url)) {
jars.addElement(url);
}
}
}
}
/**
* Return a URL[] that can be used to construct a class loader
*/
public static URL[] getClassPath(Vector v) {
URL[] urls = new URL[v.size()];
for (int i = 0; i < v.size(); i++) {
urls[i] = (URL) v.elementAt(i);
}
return urls;
}
/**
* Construct a URL classpath from files in a directory, a cpath property,
* and tools.jar.
*/
public static URL[] getClassPath(String dir, String cpath,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -