_sLogger.log(Level.FINEST, MSG_BASE_SET_PROPERTY, new Object[]{propertyName, value});
ConfigBean baseBean = getBaseConfigBean();
Class cl = baseBean.getClass();
ElementProperty prop = null;
try {
Method method = cl.getDeclaredMethod("getElementPropertyByName", new Class[]{Class.forName("java.lang.String")});
prop = (ElementProperty)method.invoke(baseBean, new Object[]{propertyName});
}
catch (Exception e) {
wrapAndThrowMBeanException(e, "setattribute_undefined_properties_in_base_element", propertyName );
}
if(prop==null && value!=null && (bAllowsEmptyValue || !value.equals(""))) {
prop = new ElementProperty();
prop.setName(propertyName);
if(ConfigMBeanHelper.PROPERTY_SPECIAL_EMPTY_VALUE.equals(value))
prop.setValue("");
else
prop.setValue(value);
try {
Method method = cl.getDeclaredMethod("addElementProperty", new Class[]{prop.getClass()});
method.invoke(baseBean, new Object[]{prop});
}
catch (Exception e) {
wrapAndThrowMBeanException(e, "setproperty_invoke_error", propertyName );
}
}
else {
if(value==null || (!bAllowsEmptyValue && value.equals(""))) {
try {
Method method = cl.getDeclaredMethod("removeElementProperty", new Class[]{prop.getClass()});
method.invoke(baseBean, new Object[]{prop});
}
catch (Exception e) {
wrapAndThrowMBeanException(e, "setproperty_could_not_remove_propery", propertyName );
}
}
else
{
if(ConfigMBeanHelper.PROPERTY_SPECIAL_EMPTY_VALUE.equals(value))
prop.setValue("");
else
prop.setValue(value);
}
}
}