package rocks.inspectit.ui.rcp.model; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; 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.SensorTypeIdent; import rocks.inspectit.ui.rcp.InspectIT; import rocks.inspectit.ui.rcp.InspectITImages; import rocks.inspectit.ui.rcp.editor.inputdefinition.EditorPropertiesData; import rocks.inspectit.ui.rcp.editor.inputdefinition.EditorPropertiesData.PartType; import rocks.inspectit.ui.rcp.editor.inputdefinition.InputDefinition; import rocks.inspectit.ui.rcp.editor.inputdefinition.InputDefinition.IdDefinition; import rocks.inspectit.ui.rcp.formatter.TextFormatter; 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 DeferredJmxObjectComposite extends DeferredComposite { /** * All the classes which are being displayed in the sub-tree. */ private List<JmxDefinitionDataIdent> childJmxData = new CopyOnWriteArrayList<>(); /** * The repository definition. */ private RepositoryDefinition repositoryDefinition; /** * This sensor type ident is used to create the nodes. */ private SensorTypeIdent sensorTypeIdent; /** * Sets {@link #sensorTypeIdent}. * * @param sensorTypeIdent * New value for {@link #sensorTypeIdent} */ public void setSensorTypeIdent(SensorTypeIdent sensorTypeIdent) { this.sensorTypeIdent = sensorTypeIdent; } @Override public void fetchDeferredChildren(Object object, IElementCollector collector, IProgressMonitor monitor) { try { Composite objectComposite = (Composite) object; monitor.beginTask("Loading monitored JMX-Attributes...", IProgressMonitor.UNKNOWN); for (JmxDefinitionDataIdent jmxIdent : childJmxData) { Component jmxAttribute = new Leaf(); jmxAttribute.setName(jmxIdent.getmBeanAttributeName()); jmxAttribute.setTooltip(jmxIdent.getmBeanAttributeDescription()); jmxAttribute.setImage(InspectIT.getDefault().getImage(InspectITImages.IMG_BLUE_DOCUMENT_TABLE)); InputDefinition inputDefinition = new InputDefinition(); inputDefinition.setRepositoryDefinition(repositoryDefinition); inputDefinition.setId(SensorTypeEnum.JMX_SENSOR_DATA); EditorPropertiesData editorPropertiesData = new EditorPropertiesData(); editorPropertiesData.setSensorImage(InspectIT.getDefault().getImage(InspectITImages.IMG_BEAN)); editorPropertiesData.setSensorName("JMX Data"); editorPropertiesData.setViewName(TextFormatter.getJmxDefinitionString(jmxIdent)); editorPropertiesData.setPartNameFlag(PartType.VIEW); inputDefinition.setEditorPropertiesData(editorPropertiesData); IdDefinition idDefinition = new IdDefinition(); idDefinition.setPlatformId(jmxIdent.getPlatformIdent().getId()); idDefinition.setSensorTypeId(sensorTypeIdent.getId()); idDefinition.setJmxDefinitionId(jmxIdent.getId()); inputDefinition.setIdDefinition(idDefinition); jmxAttribute.setInputDefinition(inputDefinition); collector.add(jmxAttribute, monitor); objectComposite.addChild(jmxAttribute); if (monitor.isCanceled()) { break; } } } finally { collector.done(); monitor.done(); } } /** * {@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_BOOK); } /** * Adds a {@link JmxDefinitionDataIdent} which will be displayed in this sub-tree. * * @param jmxIdent * The {@link JmxDefinitionDataIdent} to be displayed. */ public void addJmxDataToDisplay(JmxDefinitionDataIdent jmxIdent) { childJmxData.add(jmxIdent); } }