package rocks.inspectit.ui.rcp.editor.table.input; import java.util.EnumSet; import java.util.HashSet; import java.util.List; import java.util.Set; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.viewers.ViewerComparator; import rocks.inspectit.shared.all.communication.data.InvocationAwareData; import rocks.inspectit.shared.all.communication.data.InvocationSequenceData; import rocks.inspectit.shared.cs.communication.comparator.ResultComparator; import rocks.inspectit.ui.rcp.editor.inputdefinition.InputDefinition; import rocks.inspectit.ui.rcp.editor.inputdefinition.extra.InputDefinitionExtrasMarkerFactory; import rocks.inspectit.ui.rcp.editor.preferences.PreferenceId; import rocks.inspectit.ui.rcp.editor.root.IRootEditor; import rocks.inspectit.ui.rcp.editor.table.TableViewerComparator; import rocks.inspectit.ui.rcp.repository.CmrRepositoryDefinition; /** * A extension of the {@link InvocOverviewInputController} that displays the invocations that are * statically transfered to the view via invocation aware data. * * @author Ivan Senic * */ public class NavigationInvocOverviewInputController extends InvocOverviewInputController { /** * The ID of this subview / controller. */ public static final String ID = "inspectit.subview.table.navigationinvocoverview"; /** * List of all invocation sequences that can be displayed. */ private List<InvocationAwareData> invocationAwareDataList; /** * {@inheritDoc} */ @Override public void setInputDefinition(InputDefinition inputDefinition) { if (inputDefinition.hasInputDefinitionExtra(InputDefinitionExtrasMarkerFactory.NAVIGATION_STEPPING_EXTRAS_MARKER)) { invocationAwareDataList = inputDefinition.getInputDefinitionExtra(InputDefinitionExtrasMarkerFactory.NAVIGATION_STEPPING_EXTRAS_MARKER).getInvocationAwareDataList(); } super.setInputDefinition(inputDefinition); } /** * {@inheritDoc} */ @Override public Set<PreferenceId> getPreferenceIds() { Set<PreferenceId> preferences = EnumSet.noneOf(PreferenceId.class); if (getInputDefinition().getRepositoryDefinition() instanceof CmrRepositoryDefinition) { preferences.add(PreferenceId.CLEAR_BUFFER); } preferences.add(PreferenceId.ITEMCOUNT); return preferences; } /** * {@inheritDoc} */ @Override public ViewerComparator getComparator() { TableViewerComparator<InvocationSequenceData> invocationDataViewerComparator = new TableViewerComparator<>(); for (Column column : Column.values()) { ResultComparator<InvocationSequenceData> resultComparator = new ResultComparator<>(column.dataComparator, getCachedDataService()); invocationDataViewerComparator.addColumn(getMappedTableViewerColumn(column).getColumn(), resultComparator); } return invocationDataViewerComparator; } /** * {@inheritDoc} */ @Override public void doRefresh(IProgressMonitor monitor, IRootEditor rootEditor) { monitor.beginTask("Updating Invocation Overview", IProgressMonitor.UNKNOWN); monitor.subTask("Retrieving the Invocation Overview from the CMR"); List<InvocationSequenceData> invocData; Set<Long> invocationIdsSet = new HashSet<>(); for (InvocationAwareData invocationAwareData : invocationAwareDataList) { if (null != invocationAwareData.getInvocationParentsIdSet()) { invocationIdsSet.addAll(invocationAwareData.getInvocationParentsIdSet()); } } long platformIdent = getInputDefinition().getIdDefinition().getPlatformId(); invocData = getDataAccessService().getInvocationSequenceOverview(platformIdent, invocationIdsSet, getLimit(), getResultComparator()); getInvocationSequenceData().clear(); if (!invocData.isEmpty()) { monitor.subTask("Displaying the Invocation Overview"); getInvocationSequenceData().addAll(invocData); } monitor.done(); } }