package rocks.inspectit.ui.rcp.ci.form.editor; import java.util.Objects; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorSite; import org.eclipse.ui.PartInitException; import rocks.inspectit.shared.all.exception.BusinessException; import rocks.inspectit.shared.cs.ci.business.impl.ApplicationDefinition; import rocks.inspectit.ui.rcp.InspectIT; import rocks.inspectit.ui.rcp.InspectITImages; import rocks.inspectit.ui.rcp.ci.form.input.ApplicationDefinitionEditorInput; import rocks.inspectit.ui.rcp.ci.form.page.ApplicationDefinitionPage; import rocks.inspectit.ui.rcp.ci.form.page.BusinessTransactionPage; import rocks.inspectit.ui.rcp.ci.listener.IApplicationDefinitionChangeListener; import rocks.inspectit.ui.rcp.repository.CmrRepositoryDefinition; import rocks.inspectit.ui.rcp.repository.CmrRepositoryDefinition.OnlineStatus; /** * Editor for the {@link ApplicationDefinition}. * * @author Alexander Wert * */ public class ApplicationDefinitionEditor extends AbstractConfigurationInterfaceFormEditor implements IApplicationDefinitionChangeListener { /** * Editor ID. */ public static final String ID = "rocks.inspectit.ui.rcp.ci.editor.applicationDefinitionEditor"; /** * {@inheritDoc} */ @Override public void init(IEditorSite site, IEditorInput input) throws PartInitException { if (!(input instanceof ApplicationDefinitionEditorInput)) { throw new PartInitException("Editor input must be of a type: " + ApplicationDefinitionEditorInput.class.getName()); } setSite(site); setInput(input); ApplicationDefinitionEditorInput applicationDefinitionEditorInput = (ApplicationDefinitionEditorInput) input; setPartName(applicationDefinitionEditorInput.getName()); setTitleImage(InspectIT.getDefault().getImage(InspectITImages.IMG_BUSINESS_CONTEXT)); InspectIT.getDefault().getInspectITConfigurationInterfaceManager().addApplicationDefinitionChangeListener(this); } /** * {@inheritDoc} */ @Override protected void addPages() { try { int pageIndex = addPage(new ApplicationDefinitionPage(this)); setPageImage(pageIndex, InspectIT.getDefault().getImage(InspectITImages.IMG_APPLICATION)); pageIndex = addPage(new BusinessTransactionPage(this)); setPageImage(pageIndex, InspectIT.getDefault().getImage(InspectITImages.IMG_BUSINESS_TRANSACTION)); } catch (PartInitException e) { InspectIT.getDefault().log(IStatus.ERROR, "Error occurred trying to open the Application Definition editor.", e); } } /** * {@inheritDoc} */ @Override public void doSave(IProgressMonitor monitor) { monitor.beginTask("Saving appplication definition..", IProgressMonitor.UNKNOWN); if (!checkValid()) { monitor.setCanceled(true); monitor.done(); return; } ApplicationDefinitionEditorInput applicationDefinitionEditorInput = (ApplicationDefinitionEditorInput) getEditorInput(); CmrRepositoryDefinition cmrRepositoryDefinition = applicationDefinitionEditorInput.getCmrRepositoryDefinition(); ApplicationDefinition applicationDefinition = applicationDefinitionEditorInput.getApplication(); if (cmrRepositoryDefinition.getOnlineStatus() != OnlineStatus.OFFLINE) { try { commitPages(true); // store changes to CMR applicationDefinition = cmrRepositoryDefinition.getConfigurationInterfaceService().updateApplicationDefinition(applicationDefinition); // update listeners InspectIT.getDefault().getInspectITConfigurationInterfaceManager().applicationUpdated(applicationDefinition, cmrRepositoryDefinition); // set no exception and fire dirty state changed setExceptionOnSave(false); editorDirtyStateChanged(); } catch (BusinessException e) { monitor.setCanceled(true); setExceptionOnSave(true); editorDirtyStateChanged(); InspectIT.getDefault().createErrorDialog("Saving of the application definition '" + applicationDefinition.getApplicationName() + "' failed due to the exception on the CMR.", e, -1); } catch (Throwable t) { // NOPMD monitor.setCanceled(true); setExceptionOnSave(true); editorDirtyStateChanged(); InspectIT.getDefault().createErrorDialog("Unexpected exception occurred during an attempt to save the application '" + applicationDefinition.getApplicationName() + "'.", t, -1); } } else { monitor.setCanceled(true); InspectIT.getDefault().createErrorDialog("Saving of the application '" + applicationDefinition.getApplicationName() + "' failed because CMR is currently not online.", -1); } monitor.done(); } /** * {@inheritDoc} */ @Override public void applicationCreated(ApplicationDefinition application, int positionIndex, CmrRepositoryDefinition repositoryDefinition) { // nothing to do here } /** * {@inheritDoc} */ @Override public void applicationMoved(ApplicationDefinition application, int oldPositionIndex, int newPositionIndex, CmrRepositoryDefinition repositoryDefinition) { applicationUpdated(application, repositoryDefinition); } /** * {@inheritDoc} */ @Override public void applicationUpdated(ApplicationDefinition application, CmrRepositoryDefinition repositoryDefinition) { ApplicationDefinitionEditorInput input = (ApplicationDefinitionEditorInput) getEditorInput(); if (!Objects.equals(repositoryDefinition, input.getCmrRepositoryDefinition())) { return; } if (Objects.equals(input.getApplication().getId(), application.getId())) { final ApplicationDefinitionEditorInput newInput = new ApplicationDefinitionEditorInput(application, repositoryDefinition); Display.getDefault().asyncExec(new Runnable() { @Override public void run() { setPartName(newInput.getName()); setInputWithNotify(newInput); } }); } } /** * {@inheritDoc} */ @Override public void applicationDeleted(ApplicationDefinition application, CmrRepositoryDefinition repositoryDefinition) { ApplicationDefinitionEditorInput input = (ApplicationDefinitionEditorInput) getEditorInput(); if (!Objects.equals(repositoryDefinition, input.getCmrRepositoryDefinition())) { return; } if (Objects.equals(input.getApplication().getId(), application.getId())) { Display.getDefault().asyncExec(new Runnable() { @Override public void run() { close(false); } }); } } /** * {@inheritDoc} */ @Override public void dispose() { InspectIT.getDefault().getInspectITConfigurationInterfaceManager().removeApplicationDefinitionChangeListener(this); super.dispose(); } }