package rocks.inspectit.ui.rcp.ci.handler; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.apache.commons.collections.CollectionUtils; 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.MultiStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.MessageBox; import org.eclipse.ui.handlers.HandlerUtil; import org.eclipse.ui.progress.IProgressConstants; 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.provider.IApplicationProvider; import rocks.inspectit.ui.rcp.repository.CmrRepositoryDefinition; import rocks.inspectit.ui.rcp.repository.CmrRepositoryDefinition.OnlineStatus; /** * Delete the application handler. * * @author Alexander Wert * */ public class DeleteApplicationHandler extends AbstractHandler implements IHandler { /** * {@inheritDoc} */ @Override public Object execute(final ExecutionEvent event) throws ExecutionException { final StructuredSelection selection = (StructuredSelection) HandlerUtil.getCurrentSelection(event); if (selection.isEmpty()) { return null; } final int size = selection.size(); MessageBox confirmDelete = new MessageBox(HandlerUtil.getActiveShell(event), SWT.OK | SWT.CANCEL | SWT.ICON_QUESTION); confirmDelete.setText("Confirm Delete"); confirmDelete.setMessage("Are you sure you want to delete the " + size + " selected application" + ((size > 1) ? "s" : "") + "?"); boolean confirmed = SWT.OK == confirmDelete.open(); if (confirmed) { Job deleteApplicationsJob = new Job("Delete Application(s) Job") { @Override protected IStatus run(IProgressMonitor monitor) { List<Status> statuses = new ArrayList<>(); for (Iterator<?> it = selection.iterator(); it.hasNext();) { Object selected = it.next(); if (selected instanceof IApplicationProvider) { IApplicationProvider applicationProvider = (IApplicationProvider) selected; ApplicationDefinition application = applicationProvider.getApplication(); CmrRepositoryDefinition repositoryDefinition = applicationProvider.getCmrRepositoryDefinition(); try { if (repositoryDefinition.getOnlineStatus() != OnlineStatus.OFFLINE) { repositoryDefinition.getConfigurationInterfaceService().deleteApplicationDefinition(application); InspectIT.getDefault().getInspectITConfigurationInterfaceManager().applicationDeleted(application, repositoryDefinition); } else { statuses.add(new Status(IStatus.ERROR, InspectIT.ID, "Error deleting application " + application.getApplicationName() + " from the CMR. Repository is offline!")); } } catch (Exception e) { statuses.add(new Status(IStatus.ERROR, InspectIT.ID, "Error deleting application " + application.getApplicationName() + " from the CMR.", e)); } } } if (CollectionUtils.isNotEmpty(statuses)) { if (1 == statuses.size()) { return statuses.iterator().next(); } else { return new MultiStatus(InspectIT.ID, IStatus.OK, statuses.toArray(new Status[statuses.size()]), "Delete of several applications failed.", null); } } else { return Status.OK_STATUS; } } }; deleteApplicationsJob.setUser(true); deleteApplicationsJob.setProperty(IProgressConstants.ICON_PROPERTY, InspectIT.getDefault().getImageDescriptor(InspectITImages.IMG_APPLICATION)); deleteApplicationsJob.schedule(); } return null; } }