package rocks.inspectit.ui.rcp.model; import java.util.HashMap; import java.util.Map; import java.util.Set; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.swt.graphics.Image; import org.eclipse.ui.progress.IElementCollector; import rocks.inspectit.shared.all.cmr.model.JmxDefinitionDataIdent; import rocks.inspectit.shared.all.cmr.model.PlatformIdent; import rocks.inspectit.shared.all.cmr.model.SensorTypeIdent; import rocks.inspectit.ui.rcp.InspectIT; import rocks.inspectit.ui.rcp.InspectITImages; import rocks.inspectit.ui.rcp.repository.RepositoryDefinition; /** * This class only initializes the sub-tree if it is requested. Furthermore, the creation of the * objects is done piece after piece, so that an immediate visualization can be seen (important for * sub-trees which are very large). * * @author Marius Oehler * */ public class DeferredJmxBrowserComposite extends DeferredComposite { /** * The platform ident is used to create the package elements in the sub-tree. */ private PlatformIdent platformIdent; /** * This sensor type ident is used to create the sub-tree. */ private SensorTypeIdent sensorTypeIdent; /** * Sets {@link #sensorTypeIdent}. * * @param sensorTypeIdent * New value for {@link #sensorTypeIdent} */ public void setSensorTypeIdent(SensorTypeIdent sensorTypeIdent) { this.sensorTypeIdent = sensorTypeIdent; } /** * The platform ident used to retrieve the monitored MBeans. * * @param platformIdent * the platformIdent to set */ public void setPlatformIdent(PlatformIdent platformIdent) { this.platformIdent = platformIdent; } /** * The repository definition. */ private RepositoryDefinition repositoryDefinition; @Override public void fetchDeferredChildren(Object object, IElementCollector collector, IProgressMonitor monitor) { try { Composite browserComposite = (Composite) object; Set<JmxDefinitionDataIdent> jmxIdents = platformIdent.getJmxDefinitionDataIdents(); monitor.beginTask("Loading monitored JMX-Packages...", IProgressMonitor.UNKNOWN); Map<String, DeferredJmxPackageComposite> packageNames = new HashMap<>(jmxIdents.size()); for (JmxDefinitionDataIdent jmxIdent : jmxIdents) { String packageName = jmxIdent.getDerivedDomainName(); // check if the given package was already added. if (!packageNames.containsKey(packageName)) { DeferredJmxPackageComposite composite = getNewChild(); composite.setRepositoryDefinition(repositoryDefinition); composite.setName(packageName); collector.add(composite, monitor); browserComposite.addChild(composite); packageNames.put(packageName, composite); } DeferredJmxPackageComposite composite = packageNames.get(packageName); composite.setSensorTypeIdent(sensorTypeIdent); composite.addJmxDataToDisplay(jmxIdent); if (monitor.isCanceled()) { break; } } } finally { collector.done(); monitor.done(); } } /** * @return Returns the right implementation of the {@link DeferredJmxPackageComposite} to use * for the child. */ protected DeferredJmxPackageComposite getNewChild() { return new DeferredJmxPackageComposite(); } /** * {@inheritDoc} */ @Override public void setRepositoryDefinition(RepositoryDefinition repositoryDefinition) { this.repositoryDefinition = repositoryDefinition; } /** * {@inheritDoc} */ @Override public RepositoryDefinition getRepositoryDefinition() { return repositoryDefinition; } /** * {@inheritDoc} */ @Override public Image getImage() { return InspectIT.getDefault().getImage(InspectITImages.IMG_INSTRUMENTATION_BROWSER); } }