package rocks.inspectit.ui.rcp.editor.table.input;
import java.util.EnumSet;
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.InvocationSequenceData;
import rocks.inspectit.shared.all.exception.BusinessException;
import rocks.inspectit.shared.cs.communication.comparator.ResultComparator;
import rocks.inspectit.shared.cs.communication.data.cmr.Alert;
import rocks.inspectit.ui.rcp.InspectIT;
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;
/**
* Sub-class of {@link InvocOverviewInputController} that shows only the invocation sequences
* related to an alert.
*
* @author Alexander Wert
*
*/
public class AlertInvocInputController extends InvocOverviewInputController {
/**
* The alert.
*/
private Alert alert;
/**
* {@inheritDoc}
*/
@Override
public void setInputDefinition(InputDefinition inputDefinition) {
if (inputDefinition.hasInputDefinitionExtra(InputDefinitionExtrasMarkerFactory.ALERT_EXTRAS_MARKER)) {
alert = inputDefinition.getInputDefinitionExtra(InputDefinitionExtrasMarkerFactory.ALERT_EXTRAS_MARKER).getAlert();
}
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.LIVEMODE);
}
preferences.add(PreferenceId.UPDATE);
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");
getInvocationSequenceData().clear();
List<InvocationSequenceData> invocData;
try {
invocData = getDataAccessService().getInvocationSequenceOverview(alert.getId(), getLimit(), getResultComparator());
if (!invocData.isEmpty()) {
monitor.subTask("Displaying the Invocation Overview");
getInvocationSequenceData().addAll(invocData);
}
} catch (BusinessException e) {
InspectIT.getDefault().createErrorDialog("Failed loading invocation sequences for alert '" + alert + "'", e, -1);
}
monitor.done();
}
}