in application/org.openjdk.jmc.rjmx.ui/src/main/java/org/openjdk/jmc/rjmx/ui/internal/AttributeSelectorComponent.java [120:180]
public void setInput(AttributeSelectionContentModel selectorModel) {
m_selectorModel = selectorModel;
IMRIMetadataService mds = selectorModel.getMetadataService();
// Build model
TreeNodeBuilder root = new TreeNodeBuilder();
int mriCount = 0;
for (MRI mri : selectorModel.getAvailableAttributes()) {
ObjectName bean = mri.getObjectName();
IMRIMetadata md = mds.getMetadata(mri);
if (!m_viewModel.isNumericalOnly() || MRIMetadataToolkit.isNumerical(md)) {
TreeNodeBuilder node = root.getUniqueChild(bean.getDomain());
Property[] properties = MBeanPropertiesOrderer.getOrderedProperties(bean);
for (Property p : properties) {
node = node.get(p.getStringRepresentation());
if (p instanceof PropertyWithMBean || node.getValue() == null) {
node.setValue(p);
}
}
for (MRI parentMri : mri.getParentMRIs()) {
node = node.get(parentMri, mds.getMetadata(parentMri));
}
node.get(mri, md);
mriCount++;
}
}
ITreeNode[] tree = root.getChildren(null);
mbeanTreeViewer.setInput(tree);
// Select and expand
List<ITreeNode> selectList = new ArrayList<>();
List<ITreeNode> expandList = new ArrayList<>();
List<ITreeNode> search = new ArrayList<>();
search.addAll(Arrays.asList(tree));
while (!search.isEmpty()) {
ITreeNode node = search.remove(0);
if (node.getUserData() instanceof IMRIMetadata) {
MRI mri = ((IMRIMetadata) node.getUserData()).getMRI();
for (MRI e : selectorModel.getInitialExpandedAttributes()) {
if (mri.equals(e)) {
expandList.add(node);
}
}
for (MRI s : selectorModel.getSelectedAttributes()) {
if (mri.equals(s)) {
selectList.add(node);
}
}
}
ITreeNode[] children = node.getChildren();
if (children != null) {
search.addAll(Arrays.asList(children));
}
}
if (!selectList.isEmpty()) {
mbeanTreeViewer.setSelection(new StructuredSelection(selectList), true);
}
for (ITreeNode e : expandList) {
mbeanTreeViewer.expandToLevel(e, 0);
}
TreeNodeFilter.install(mbeanTreeViewer, filterText, mriCount > MAX_ATTRIBUTES_SYNC_FILTER);
}