package rocks.inspectit.ui.rcp.handlers; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.commands.IHandler; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.window.Window; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.handlers.HandlerUtil; import rocks.inspectit.shared.cs.cmr.property.update.configuration.ConfigurationUpdate; import rocks.inspectit.ui.rcp.InspectIT; import rocks.inspectit.ui.rcp.property.CmrConfigurationDialog; import rocks.inspectit.ui.rcp.provider.ICmrRepositoryProvider; import rocks.inspectit.ui.rcp.repository.CmrRepositoryDefinition; import rocks.inspectit.ui.rcp.repository.CmrRepositoryDefinition.OnlineStatus; /** * Handler for starting the CMR configuration. * * @author Ivan Senic * */ public class CmrConfigurationHandler extends AbstractHandler implements IHandler { /** * {@inheritDoc} */ @Override public Object execute(ExecutionEvent event) throws ExecutionException { StructuredSelection selection = (StructuredSelection) HandlerUtil.getCurrentSelection(event); if (selection.getFirstElement() instanceof ICmrRepositoryProvider) { Shell shell = HandlerUtil.getActiveShell(event); CmrRepositoryDefinition cmrRepositoryDefinition = ((ICmrRepositoryProvider) selection.getFirstElement()).getCmrRepositoryDefinition(); CmrConfigurationDialog preferenceDialog = new CmrConfigurationDialog(shell, cmrRepositoryDefinition); preferenceDialog.open(); if (Window.OK == preferenceDialog.getReturnCode()) { ConfigurationUpdate configurationUpdate = preferenceDialog.getConfigurationUpdate(); boolean restartRequired = preferenceDialog.isServerRestartRequired(); if (null != configurationUpdate) { boolean executeRestart = false; if (restartRequired) { String msg = "Selected updates need server restart to be effective. Do you want to restart the CMR?"; executeRestart = MessageDialog.openQuestion(shell, "CMR Restart Required", msg); } new ConfigurationUpdateJob(cmrRepositoryDefinition, configurationUpdate, executeRestart).schedule(); } } } return null; } /** * Job for updating the configuration. * * @author Ivan Senic * */ private static final class ConfigurationUpdateJob extends Job { /** * CMR to update. */ private CmrRepositoryDefinition cmrRepositoryDefinition; /** * {@link ConfigurationUpdate}. */ private ConfigurationUpdate configurationUpdate; /** * If user has selected that restart should be automatically executed. */ private boolean executeRestart; /** * Default constructor. * * @param cmrRepositoryDefinition * CMR to update. * @param configurationUpdate * {@link ConfigurationUpdate} * @param executeRestart * If user has selected that restart should be automatically executed. */ public ConfigurationUpdateJob(CmrRepositoryDefinition cmrRepositoryDefinition, ConfigurationUpdate configurationUpdate, boolean executeRestart) { super("Update CMR Configuration Job"); this.cmrRepositoryDefinition = cmrRepositoryDefinition; this.configurationUpdate = configurationUpdate; this.executeRestart = executeRestart; setUser(true); } /** * {@inheritDoc} */ @Override protected IStatus run(IProgressMonitor monitor) { monitor.beginTask("Updating the CMR configuration", IProgressMonitor.UNKNOWN); if (cmrRepositoryDefinition.getOnlineStatus() != OnlineStatus.OFFLINE) { try { cmrRepositoryDefinition.getCmrManagementService().updateConfiguration(configurationUpdate, executeRestart); } catch (Exception e) { return new Status(IStatus.ERROR, InspectIT.ID, "Exception occurred trying to update the CMR configuration.", e); } monitor.done(); return Status.OK_STATUS; } else { return new Status(IStatus.ERROR, InspectIT.ID, "Can not update the configuration because selected CMR is offline."); } } } }