tmf: Update copyright headers in tmf.ui
[deliverable/tracecompass.git] / org.eclipse.linuxtools.tmf.ui / src / org / eclipse / linuxtools / internal / tmf / ui / project / handlers / DeleteTraceHandler.java
index 5749865eb0863eb07ec206c5f5eed51c531775e4..5ef48140e3ca626322bee2abde9471501d388ca1 100644 (file)
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2010, 2011 Ericsson
+ * Copyright (c) 2009, 2013 Ericsson
  *
  * All rights reserved. This program and the accompanying materials are
  * made available under the terms of the Eclipse Public License v1.0 which
@@ -19,6 +19,7 @@ import java.util.List;
 import org.eclipse.core.commands.AbstractHandler;
 import org.eclipse.core.commands.ExecutionEvent;
 import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
@@ -28,16 +29,21 @@ import org.eclipse.jface.viewers.ISelectionProvider;
 import org.eclipse.jface.viewers.TreeSelection;
 import org.eclipse.linuxtools.internal.tmf.ui.Activator;
 import org.eclipse.linuxtools.tmf.ui.project.model.ITmfProjectModelElement;
+import org.eclipse.linuxtools.tmf.ui.project.model.TmfExperimentElement;
 import org.eclipse.linuxtools.tmf.ui.project.model.TmfExperimentFolder;
 import org.eclipse.linuxtools.tmf.ui.project.model.TmfTraceElement;
 import org.eclipse.linuxtools.tmf.ui.project.model.TmfTraceFolder;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.MessageBox;
 import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IEditorReference;
+import org.eclipse.ui.IWorkbench;
 import org.eclipse.ui.IWorkbenchPage;
 import org.eclipse.ui.IWorkbenchPart;
 import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.part.FileEditorInput;
 
 /**
  * <b><u>DeleteTraceHandler</u></b>
@@ -63,6 +69,9 @@ public class DeleteTraceHandler extends AbstractHandler {
         // Get the selection
         IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
         IWorkbenchPart part = page.getActivePart();
+        if (part == null) {
+            return false;
+        }
         ISelectionProvider selectionProvider = part.getSite().getSelectionProvider();
         if (selectionProvider == null) {
             return false;
@@ -73,7 +82,6 @@ public class DeleteTraceHandler extends AbstractHandler {
         fSelection = null;
         if (selection instanceof TreeSelection) {
             fSelection = (TreeSelection) selection;
-            @SuppressWarnings("unchecked")
             Iterator<Object> iterator = fSelection.iterator();
             while (iterator.hasNext()) {
                 Object element = iterator.next();
@@ -109,44 +117,77 @@ public class DeleteTraceHandler extends AbstractHandler {
             return null;
         }
 
-        @SuppressWarnings("unchecked")
         Iterator<Object> iterator = fSelection.iterator();
         while (iterator.hasNext()) {
             Object element = iterator.next();
             if (element instanceof TmfTraceElement) {
-                TmfTraceElement trace = (TmfTraceElement) element;
+                final TmfTraceElement trace = (TmfTraceElement) element;
                 IResource resource = trace.getResource();
                 try {
+                    // Close the trace if open
+                    IFile file = trace.getBookmarksFile();
+                    FileEditorInput input = new FileEditorInput(file);
+                    IWorkbench wb = PlatformUI.getWorkbench();
+                    for (IWorkbenchWindow wbWindow : wb.getWorkbenchWindows()) {
+                        for (IWorkbenchPage wbPage : wbWindow.getPages()) {
+                            for (IEditorReference editorReference : wbPage.getEditorReferences()) {
+                                if (editorReference.getEditorInput().equals(input)) {
+                                    wbPage.closeEditor(editorReference.getEditor(false), false);
+                                }
+                            }
+                        }
+                    }
+
                     IPath path = resource.getLocation();
                     if (path != null && (trace.getParent() instanceof TmfTraceFolder)) {
-                        String location = path.toString();
                         TmfExperimentFolder experimentFolder = trace.getProject().getExperimentsFolder();
 
                         // Propagate the removal to traces
                         for (ITmfProjectModelElement experiment : experimentFolder.getChildren()) {
                             List<ITmfProjectModelElement> toRemove = new LinkedList<ITmfProjectModelElement>();
                             for (ITmfProjectModelElement child : experiment.getChildren()) {
-                                if (child.getResource().getLocation().toString().equals(location)) {
+                                if (child.getName().equals(trace.getName())) {
                                     toRemove.add(child);
                                 }
                             }
                             for (ITmfProjectModelElement child : toRemove) {
+                                // Close the experiment if open
+                                file = ((TmfExperimentElement) experiment).getBookmarksFile();
+                                input = new FileEditorInput(file);
+                                for (IWorkbenchWindow wbWindow : wb.getWorkbenchWindows()) {
+                                    for (IWorkbenchPage wbPage : wbWindow.getPages()) {
+                                        for (IEditorReference editorReference : wbPage.getEditorReferences()) {
+                                            if (editorReference.getEditorInput().equals(input)) {
+                                                wbPage.closeEditor(editorReference.getEditor(false), false);
+                                            }
+                                        }
+                                    }
+                                }
                                 experiment.removeChild(child);
                                 child.getResource().delete(true, null);
                             }
                         }
+
+                        // Delete supplementary files
+                        trace.deleteSupplementaryFolder();
                     }
 
                     // Finally, delete the trace
                     resource.delete(true, new NullProgressMonitor());
 
-                    // Delete supplementary files
-                    trace.deleteSupplementaryFolder();
-
                     // Refresh the project
                     trace.getProject().refresh();
 
-                } catch (CoreException e) {
+                } catch (final CoreException e) {
+                    Display.getDefault().asyncExec(new Runnable() {
+                        @Override
+                        public void run() {
+                            final MessageBox mb = new MessageBox(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell());
+                            mb.setText(Messages.DeleteTraceHandler_Error + ' ' + trace.getName());
+                            mb.setMessage(e.getMessage());
+                            mb.open();
+                        }
+                    });
                     Activator.getDefault().logError("Error deleting trace: " + trace.getName(), e); //$NON-NLS-1$
                 }
             }
This page took 0.025743 seconds and 5 git commands to generate.