in src/main/java/org/apache/sling/jmx/provider/impl/JMXResourceProvider.java [145:216]
public Resource getResource(final ResourceResolver resourceResolver,
final String path) {
final PathInfo info = this.parse(path);
if ( info != null ) {
if ( info.isRoot ) {
return new RootResource(resourceResolver, path);
}
if ( info.mbeanInfo == null ) {
final Set<ObjectName> names = this.queryObjectNames(info.pathInfo);
if ( names.size() != 0 ) {
return new RootResource(resourceResolver, path);
}
} else {
if (info.pathInfo == null ) {
return new MBeanResource(this.mbeanServer, resourceResolver, this.convertObjectNameToResourcePath(info.objectName), path, info.mbeanInfo, info.objectName);
}
if ( info.pathInfo.equals("mbean:attributes") ) {
final MBeanResource parent = (MBeanResource)this.getResource(resourceResolver, ResourceUtil.getParent(path));
return new AttributesResource(resourceResolver, path, parent);
}
if ( info.pathInfo.startsWith("mbean:attributes/") ) {
final Resource parentRsrc = this.getResource(resourceResolver, ResourceUtil.getParent(path));
final AttributesResource parentAttributesResource;
final MBeanResource parentMBeanResource;
if ( parentRsrc instanceof AttributesResource ) {
parentAttributesResource = (AttributesResource) parentRsrc;
parentMBeanResource = (MBeanResource)parentRsrc.getParent();
} else {
final AttributeResource parent;
if ( parentRsrc instanceof AttributeResource) {
parent = (AttributeResource)parentRsrc;
} else {
parent = ((MapResource)parentRsrc).getAttributeResource();
}
parentAttributesResource = (AttributesResource) parent.getParent();
parentMBeanResource = (MBeanResource) parentAttributesResource.getParent();
}
final AttributeList result = parentMBeanResource.getAttributes();
final String attrPath = info.pathInfo.substring("mbean:attributes/".length());
final int pos = attrPath.indexOf('/');
final String attrName;
final String subPath;
if ( pos == -1 ) {
attrName = attrPath;
subPath = null;
} else {
attrName = attrPath.substring(0, pos);
subPath = attrPath.substring(pos + 1);
}
for(final MBeanAttributeInfo mai : info.mbeanInfo.getAttributes()) {
if ( mai.getName().equals(attrName) ) {
final Iterator iter = result.iterator();
Object value = null;
while ( iter.hasNext() && value == null ) {
final Attribute a = (Attribute) iter.next();
if ( a.getName().equals(attrName) ) {
value = a.getValue();
}
}
final AttributeResource rsrc = new AttributeResource(resourceResolver, path, mai, value, parentAttributesResource);
if ( subPath != null ) {
return rsrc.getChildResource(subPath);
}
return rsrc;
}
}
}
}
}
return null;
}