int type;
String descr;
if(descrLine==null) {
String msg = localStrings.getString( "admin.server.core.mbean.meta.parseattributedescrline_exception_line_empty", EXCEPTION_LINE_EMPTY );
throw new MBeanConfigException( msg );
}
//EXTRACT method_name(param1, param2, ...) part
int idx1 = descrLine.indexOf('(');
if(idx1<=0 || idx1==descrLine.length()-1) {
String msg = localStrings.getString( "admin.server.core.mbean.meta.parseattributedescrline_wrong_exception_format", EXCEPTION_WRONG_PARAM_FORMAT, descrLine );
throw new MBeanConfigException( msg );
}
name = descrLine.substring(0, idx1).trim();
if(name.length()==0) {
String msg = localStrings.getString( "admin.server.core.mbean.meta.parseattributedescrline_wrong_exception_format", EXCEPTION_NAME_FLD_EMPTY, descrLine );
throw new MBeanConfigException( msg );
}
int idx2 = descrLine.indexOf(')', idx1+1);
if(idx2<=0) {
String msg = localStrings.getString( "admin.server.core.mbean.meta.parseattributedescrline_wrong_exception_format", EXCEPTION_WRONG_PARAM_FORMAT, descrLine );
throw new MBeanConfigException( msg );
}
Object[] params = decomposeParametersDescription(descrLine.substring(idx1+1,idx2));
//EXTRACT line fields
String[] flds = getLineFields(descrLine.substring(idx2), 3);
if(flds.length<2) {
String msg = localStrings.getString( "admin.server.core.mbean.meta.parseattributedescrline_wrong_exception_format", EXCEPTION_WRONG_LINE_FORMAT, descrLine );
throw new MBeanConfigException( msg );
}
//TYPE (INFO/ACTION...)
typeName = flds[1];
if(typeName.equals(TYPE_INFO))
type = MBeanOperationInfo.INFO;
else
if(typeName.equals(TYPE_ACTION))
type = MBeanOperationInfo.ACTION;
else
if(typeName.equals(TYPE_ACTION_INFO))
type = MBeanOperationInfo.ACTION_INFO;
else
if(typeName.equals(TYPE_UNKNOWN))
type = MBeanOperationInfo.UNKNOWN;
else {
String msg = localStrings.getString( "admin.server.core.mbean.meta.parseattributedescrline_wrong_exception_format", EXCEPTION_UNKNOWN_IMPACT_TYPE, descrLine );
throw new MBeanConfigException( msg );
}
//DESCRIPTION
String beanName = getPureClassName(configuringMBeanClass);
String defaultName = beanName+"."+name+".operation";
if(flds.length<3 || flds[2].length()==0)
descr = getResourceString(defaultName, defaultName);
else
descr = getResourceString(flds[2], defaultName);
//REFLECTION
Class[] signature = new Class[params.length/3];
for(int i=0; i<signature.length; i++)
signature[i] = (Class)params[i*3];
Method method;
try {
method = configuringMBeanClass.getMethod(name, signature);
} catch (NoSuchMethodException e)
{
String msg = localStrings.getString( "admin.server.core.mbean.meta.parseoperationdescrline_wrong_exception_format", EXCEPTION_OPER_NOT_FOUND, descrLine );
throw new MBeanConfigException( msg );
}
MBeanParameterInfo[] infos = new MBeanParameterInfo[signature.length];
for(int i=0; i<signature.length; i++)
{
String pName = (String)params[i*3+1];