package rocks.inspectit.ui.rcp.ci.view;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IBaseLabelProvider;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IWorkbenchPartSite;
import org.eclipse.ui.part.ViewPart;
import rocks.inspectit.shared.cs.ci.AlertingDefinition;
import rocks.inspectit.ui.rcp.InspectIT;
import rocks.inspectit.ui.rcp.ci.listener.IAlertDefinitionChangeListener;
import rocks.inspectit.ui.rcp.ci.wizard.EditAlertDefinitionWizard;
import rocks.inspectit.ui.rcp.model.ci.AlertDefinitionLeaf;
import rocks.inspectit.ui.rcp.repository.CmrRepositoryDefinition;
import rocks.inspectit.ui.rcp.repository.CmrRepositoryDefinition.OnlineStatus;
import rocks.inspectit.ui.rcp.view.IRefreshableView;
/**
* {@link ViewPart} displaying Alert Definitions.
*
* @author Alexander Wert
*
*/
public class AlertManagerViewPart extends ViewPart implements IRefreshableView {
/**
* View id.
*/
public static final String VIEW_ID = "rocks.inspectit.ui.rcp.ci.view.alertManager";
/**
* View instance.
*/
private AlertManagerView managerView;
/**
* {@inheritDoc}
*/
@Override
public void createPartControl(Composite parent) {
managerView = new AlertManagerView(getSite());
managerView.createControls(parent, true);
getSite().setSelectionProvider(managerView.getSelectionProviderAdapter());
}
/**
* {@inheritDoc}
*/
@Override
public void setFocus() {
managerView.setFocus();
}
/**
* {@inheritDoc}
*/
@Override
public void dispose() {
managerView.dispose();
super.dispose();
}
/**
* {@inheritDoc}
*/
@Override
public void refresh() {
managerView.refresh();
}
/**
* {@inheritDoc}
*/
@Override
public boolean canRefresh() {
return managerView.canRefresh();
}
/**
* View displaying alert definitions.
*
* @author Alexander Wert
*
*/
private static class AlertManagerView extends AbstractTableBasedManagerView implements IAlertDefinitionChangeListener {
/**
* A list of {@link AlertDefinitionLeaf}s displayed in this view.
*/
private List<AlertDefinitionLeaf> alertDefinitions = new ArrayList<>();
/**
* Menu id.
*/
public static final String MENU_ID = "rocks.inspectit.ui.rcp.ci.view.alertManager";
/**
* Default constructor.
*
* @param workbenchPartSite
* The {@link IWorkbenchPartSite} the view is showed in.
*/
AlertManagerView(IWorkbenchPartSite workbenchPartSite) {
super(workbenchPartSite);
InspectIT.getDefault().getInspectITConfigurationInterfaceManager().addAlertDefinitionChangeListener(this);
}
/**
* {@inheritDoc}
*/
@Override
protected boolean matchesContentType(Object object) {
return object instanceof AlertDefinitionLeaf;
}
/**
* {@inheritDoc}
*/
@Override
protected IBaseLabelProvider getLabelProvider() {
return new AlertLabelProvider();
}
/**
* {@inheritDoc}
*/
@Override
protected String getMenuId() {
return MENU_ID;
}
/**
* {@inheritDoc}
*/
@Override
protected void updateContent() {
alertDefinitions.clear();
if ((null != displayedCmrRepositoryDefinition) && (displayedCmrRepositoryDefinition.getOnlineStatus() == OnlineStatus.ONLINE)) {
List<AlertingDefinition> cmrAlertDefinitions = displayedCmrRepositoryDefinition.getConfigurationInterfaceService().getAlertingDefinitions();
for (AlertingDefinition alertDef : cmrAlertDefinitions) {
alertDefinitions.add(new AlertDefinitionLeaf(alertDef, displayedCmrRepositoryDefinition));
}
}
}
/**
* {@inheritDoc}
*/
@Override
protected List<?> getTableInput() {
return alertDefinitions;
}
/**
* {@inheritDoc}
*/
@Override
protected void createTableColumns(TableViewer tableViewer) {
TableViewerColumn viewerColumn = new TableViewerColumn(tableViewer, SWT.NONE);
viewerColumn.getColumn().setMoveable(true);
viewerColumn.getColumn().setResizable(true);
viewerColumn.getColumn().setText("Name");
viewerColumn.getColumn().setWidth(150);
viewerColumn.getColumn().setToolTipText("Alert definition name.");
viewerColumn = new TableViewerColumn(tableViewer, SWT.NONE);
viewerColumn.getColumn().setMoveable(true);
viewerColumn.getColumn().setResizable(true);
viewerColumn.getColumn().setText("Metric");
viewerColumn.getColumn().setWidth(200);
viewerColumn.getColumn().setToolTipText("Source of the metric the alerting is applied on.");
viewerColumn = new TableViewerColumn(tableViewer, SWT.NONE);
viewerColumn.getColumn().setMoveable(true);
viewerColumn.getColumn().setResizable(true);
viewerColumn.getColumn().setText("Threshold");
viewerColumn.getColumn().setWidth(80);
viewerColumn.getColumn().setToolTipText("Threshold value.");
}
/**
* {@inheritDoc}
*/
@Override
protected IDoubleClickListener getDoubleClickListener() {
return new IDoubleClickListener() {
@Override
public void doubleClick(DoubleClickEvent event) {
StructuredSelection selection = (StructuredSelection) event.getSelection();
EditAlertDefinitionWizard wizard = new EditAlertDefinitionWizard();
wizard.init(getWorkbenchSite().getWorkbenchWindow().getWorkbench(), selection);
WizardDialog wizardDialog = new WizardDialog(getWorkbenchSite().getShell(), wizard);
wizardDialog.open();
}
};
}
/**
* {@inheritDoc}
*/
@Override
public void alertDefinitionCreated(AlertingDefinition alertDefinition, CmrRepositoryDefinition repositoryDefinition) {
updateContent();
StructuredSelection selection = new StructuredSelection(new AlertDefinitionLeaf(alertDefinition, repositoryDefinition));
performUpdate(true, selection);
}
/**
* {@inheritDoc}
*/
@Override
public void alertDefinitionUpdated(AlertingDefinition alertDefinition, CmrRepositoryDefinition repositoryDefinition) {
updateContent();
StructuredSelection selection = new StructuredSelection(new AlertDefinitionLeaf(alertDefinition, repositoryDefinition));
performUpdate(false, selection);
}
/**
* {@inheritDoc}
*/
@Override
public void alertDefinitionDeleted(AlertingDefinition alertDefinition, CmrRepositoryDefinition repositoryDefinition) {
updateContent();
performUpdate(false);
}
}
}