metadatambeaninfoassembler.java
来自「spring framework 2.5.4源代码」· Java 代码 · 共 385 行 · 第 1/2 页
JAVA
385 行
(readMethod != null) ? this.attributeSource.getManagedAttribute(readMethod) : null;
ManagedAttribute setter =
(writeMethod != null) ? this.attributeSource.getManagedAttribute(writeMethod) : null;
if (getter != null && StringUtils.hasText(getter.getDescription())) {
return getter.getDescription();
}
else if (setter != null && StringUtils.hasText(setter.getDescription())) {
return setter.getDescription();
}
return propertyDescriptor.getDisplayName();
}
/**
* Retrieves the description for the supplied <code>Method</code> from the
* metadata. Uses the method name is no description is present in the metadata.
*/
protected String getOperationDescription(Method method, String beanKey) {
PropertyDescriptor pd = BeanUtils.findPropertyForMethod(method);
if (pd != null) {
ManagedAttribute ma = this.attributeSource.getManagedAttribute(method);
if (ma != null && StringUtils.hasText(ma.getDescription())) {
return ma.getDescription();
}
return method.getName();
}
else {
ManagedOperation mo = this.attributeSource.getManagedOperation(method);
if (mo != null && StringUtils.hasText(mo.getDescription())) {
return mo.getDescription();
}
return method.getName();
}
}
/**
* Reads <code>MBeanParameterInfo</code> from the <code>ManagedOperationParameter</code>
* attributes attached to a method. Returns an empty array of <code>MBeanParameterInfo</code>
* if no attributes are found.
*/
protected MBeanParameterInfo[] getOperationParameters(Method method, String beanKey) {
ManagedOperationParameter[] params = this.attributeSource.getManagedOperationParameters(method);
if (params == null || params.length == 0) {
return new MBeanParameterInfo[0];
}
MBeanParameterInfo[] parameterInfo = new MBeanParameterInfo[params.length];
Class[] methodParameters = method.getParameterTypes();
for (int i = 0; i < params.length; i++) {
ManagedOperationParameter param = params[i];
parameterInfo[i] =
new MBeanParameterInfo(param.getName(), methodParameters[i].getName(), param.getDescription());
}
return parameterInfo;
}
/**
* Reads the {@link ManagedNotification} metadata from the <code>Class</code> of the managed resource
* and generates and returns the corresponding {@link ModelMBeanNotificationInfo} metadata.
*/
protected ModelMBeanNotificationInfo[] getNotificationInfo(Object managedBean, String beanKey) {
ManagedNotification[] notificationAttributes =
this.attributeSource.getManagedNotifications(getClassToExpose(managedBean));
ModelMBeanNotificationInfo[] notificationInfos =
new ModelMBeanNotificationInfo[notificationAttributes.length];
for (int i = 0; i < notificationAttributes.length; i++) {
ManagedNotification attribute = notificationAttributes[i];
notificationInfos[i] = JmxMetadataUtils.convertToModelMBeanNotificationInfo(attribute);
}
return notificationInfos;
}
/**
* Adds descriptor fields from the <code>ManagedResource</code> attribute
* to the MBean descriptor. Specifically, adds the <code>currencyTimeLimit</code>,
* <code>persistPolicy</code>, <code>persistPeriod</code>, <code>persistLocation</code>
* and <code>persistName</code> descriptor fields if they are present in the metadata.
*/
protected void populateMBeanDescriptor(Descriptor desc, Object managedBean, String beanKey) {
ManagedResource mr = this.attributeSource.getManagedResource(getClassToExpose(managedBean));
if (mr == null) {
throw new InvalidMetadataException(
"No ManagedResource attribute found for class: " + getClassToExpose(managedBean));
}
applyCurrencyTimeLimit(desc, mr.getCurrencyTimeLimit());
if (mr.isLog()) {
desc.setField(FIELD_LOG, "true");
}
if (StringUtils.hasLength(mr.getLogFile())) {
desc.setField(FIELD_LOG_FILE, mr.getLogFile());
}
if (StringUtils.hasLength(mr.getPersistPolicy())) {
desc.setField(FIELD_PERSIST_POLICY, mr.getPersistPolicy());
}
if (mr.getPersistPeriod() >= 0) {
desc.setField(FIELD_PERSIST_PERIOD, Integer.toString(mr.getPersistPeriod()));
}
if (StringUtils.hasLength(mr.getPersistName())) {
desc.setField(FIELD_PERSIST_NAME, mr.getPersistName());
}
if (StringUtils.hasLength(mr.getPersistLocation())) {
desc.setField(FIELD_PERSIST_LOCATION, mr.getPersistLocation());
}
}
/**
* Adds descriptor fields from the <code>ManagedAttribute</code> attribute
* to the attribute descriptor. Specifically, adds the <code>currencyTimeLimit</code>,
* <code>default</code>, <code>persistPolicy</code> and <code>persistPeriod</code>
* descriptor fields if they are present in the metadata.
*/
protected void populateAttributeDescriptor(Descriptor desc, Method getter, Method setter, String beanKey) {
ManagedAttribute gma =
(getter == null) ? ManagedAttribute.EMPTY : this.attributeSource.getManagedAttribute(getter);
ManagedAttribute sma =
(setter == null) ? ManagedAttribute.EMPTY : this.attributeSource.getManagedAttribute(setter);
applyCurrencyTimeLimit(desc, resolveIntDescriptor(gma.getCurrencyTimeLimit(), sma.getCurrencyTimeLimit()));
Object defaultValue = resolveObjectDescriptor(gma.getDefaultValue(), sma.getDefaultValue());
desc.setField(FIELD_DEFAULT, defaultValue);
String persistPolicy = resolveStringDescriptor(gma.getPersistPolicy(), sma.getPersistPolicy());
if (StringUtils.hasLength(persistPolicy)) {
desc.setField(FIELD_PERSIST_POLICY, persistPolicy);
}
int persistPeriod = resolveIntDescriptor(gma.getPersistPeriod(), sma.getPersistPeriod());
if (persistPeriod >= 0) {
desc.setField(FIELD_PERSIST_PERIOD, Integer.toString(persistPeriod));
}
}
/**
* Adds descriptor fields from the <code>ManagedAttribute</code> attribute
* to the attribute descriptor. Specifically, adds the <code>currencyTimeLimit</code>
* descriptor field if it is present in the metadata.
*/
protected void populateOperationDescriptor(Descriptor desc, Method method, String beanKey) {
ManagedOperation mo = this.attributeSource.getManagedOperation(method);
if (mo != null) {
applyCurrencyTimeLimit(desc, mo.getCurrencyTimeLimit());
}
}
/**
* Determines which of two <code>int</code> values should be used as the value
* for an attribute descriptor. In general, only the getter or the setter will
* be have a non-negative value so we use that value. In the event that both values
* are non-negative, we use the greater of the two. This method can be used to
* resolve any <code>int</code> valued descriptor where there are two possible values.
* @param getter the int value associated with the getter for this attribute
* @param setter the int associated with the setter for this attribute
*/
private int resolveIntDescriptor(int getter, int setter) {
return (getter >= setter ? getter : setter);
}
/**
* Locates the value of a descriptor based on values attached
* to both the getter and setter methods. If both have values
* supplied then the value attached to the getter is preferred.
* @param getter the Object value associated with the get method
* @param setter the Object value associated with the set method
* @return the appropriate Object to use as the value for the descriptor
*/
private Object resolveObjectDescriptor(Object getter, Object setter) {
return (getter != null ? getter : setter);
}
/**
* Locates the value of a descriptor based on values attached
* to both the getter and setter methods. If both have values
* supplied then the value attached to the getter is preferred.
* The supplied default value is used to check to see if the value
* associated with the getter has changed from the default.
* @param getter the String value associated with the get method
* @param setter the String value associated with the set method
* @return the appropriate String to use as the value for the descriptor
*/
private String resolveStringDescriptor(String getter, String setter) {
return (StringUtils.hasLength(getter) ? getter : setter);
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?