in src/java/org/apache/ivy/util/Configurator.java [591:647]
public void setAttribute(String attributeName, String value) {
if (objectStack.isEmpty()) {
throw new IllegalStateException("set root before setting attribute");
}
ObjectDescriptor od = objectStack.peek();
if (od.getObject() instanceof Macro) {
((Macro) od.getObject()).defineAttribute(attributeName, value);
return;
}
if (od.getObject() instanceof MacroRecord) {
((MacroRecord) od.getObject()).recordAttribute(attributeName, value);
return;
}
Method m = od.getSetMethod(attributeName);
if (m == null) {
if (od.getObject() instanceof Map) {
((Map<String, String>) od.getObject()).put(attributeName, value);
return;
}
throw new IllegalArgumentException("no set method found for " + attributeName + " on "
+ od.getObject().getClass());
}
Object convertedValue = null;
Class<?> paramClass = m.getParameterTypes()[0];
try {
if (paramClass.equals(String.class)) {
convertedValue = value;
} else if (paramClass.equals(Boolean.class) || paramClass.equals(boolean.class)) {
convertedValue = TRUE_VALUES.contains(value);
} else if (paramClass.equals(Character.class) || paramClass.equals(char.class)) {
convertedValue = value.length() > 0 ? value.charAt(0) : ' ';
} else if (paramClass.equals(Short.class) || paramClass.equals(short.class)) {
convertedValue = Short.valueOf(value);
} else if (paramClass.equals(Integer.class) || paramClass.equals(int.class)) {
convertedValue = Integer.valueOf(value);
} else if (paramClass.equals(Long.class) || paramClass.equals(long.class)) {
convertedValue = Long.valueOf(value);
} else if (paramClass.equals(Class.class)) {
convertedValue = Class.forName(value);
} else if (paramClass.equals(File.class)) {
convertedValue = fileResolver.resolveFile(value, od.getObjectName() + "."
+ attributeName);
} else {
convertedValue = paramClass.getConstructor(String.class).newInstance(value);
}
} catch (Exception ex) {
throw new IllegalArgumentException("impossible to convert "
+ value + " to " + paramClass + " for setting " + attributeName + " on "
+ od.getObject().getClass() + ": " + ex.getMessage(), ex);
}
try {
m.invoke(od.getObject(), convertedValue);
} catch (Exception ex) {
throw new IllegalArgumentException("impossible to set " + attributeName + " to "
+ convertedValue + " on " + od.getObject().getClass(), ex);
}
}