tmf: Add clear command on the Traces folder
authorMarc-Andre Laperle <marc-andre.laperle@ericsson.com>
Wed, 16 Jul 2014 17:15:13 +0000 (13:15 -0400)
committerMarc-Andre Laperle <marc-andre.laperle@ericsson.com>
Thu, 24 Jul 2014 13:38:36 +0000 (09:38 -0400)
This will delete all the trace folders and traces under
the Traces folder but not the folder itself.

Change-Id: I82aaa5fd8f5d1ecca7c4da212abd0fecd8e113d6
Signed-off-by: Marc-Andre Laperle <marc-andre.laperle@ericsson.com>
Reviewed-on: https://git.eclipse.org/r/30290
Tested-by: Hudson CI
Reviewed-by: Bernd Hufmann <bernd.hufmann@ericsson.com>
Tested-by: Bernd Hufmann <bernd.hufmann@ericsson.com>
org.eclipse.linuxtools.tmf.ui/plugin.properties
org.eclipse.linuxtools.tmf.ui/plugin.xml
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/internal/tmf/ui/project/handlers/DeleteFolderHandler.java
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/internal/tmf/ui/project/handlers/Messages.java
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/internal/tmf/ui/project/handlers/messages.properties

index 1ed9a90c151a837af7c505f5f78b493ffa239087..ac2790d1d17b14a3de746c86fb6cab397d7e5f87 100644 (file)
@@ -84,6 +84,10 @@ command.delete = Delete
 command.delete.mnemonic = D
 command.delete.description = Delete element
 
+command.clear = Clear
+command.clear.mnemonic = l
+command.clear.description = Clear element
+
 command.refresh = Refresh
 command.refresh.mnemonic = f
 command.refresh.description = Refresh project structure
index 172202b06ab9d0db53ca60f56cb912c075744629..feb03a9694582525977bb6ab3c18c81ba3f561e6 100644 (file)
                </with>
             </visibleWhen>
          </command>
+         <command
+               commandId="org.eclipse.ui.edit.delete"
+               disabledIcon="icons/dtool16/delete.gif"
+               icon="icons/etool16/delete.gif"
+               label="%command.clear"
+               mnemonic="%command.clear.mnemonic"
+               style="push">
+            <visibleWhen
+                  checkEnabled="false">
+               <with
+                     variable="selection">
+                  <count
+                        value="1">
+                  </count>
+                  <iterate
+                        ifEmpty="false"
+                        operator="and">
+                     <instanceof
+                           value="org.eclipse.linuxtools.tmf.ui.project.model.TmfTracesFolder">
+                     </instanceof>
+                  </iterate>
+               </with>
+            </visibleWhen>
+         </command>
          <command
                commandId="org.eclipse.ui.edit.delete"
                disabledIcon="icons/dtool16/delete.gif"
             </iterate>
          </activeWhen>
       </handler>
+      <handler
+            class="org.eclipse.linuxtools.internal.tmf.ui.project.handlers.DeleteFolderHandler"
+            commandId="org.eclipse.ui.edit.delete">
+         <activeWhen>
+            <and>
+               <count
+                     value="1">
+               </count>
+               <iterate
+                     ifEmpty="false"
+                     operator="or">
+                  <instanceof
+                        value="org.eclipse.linuxtools.tmf.ui.project.model.TmfTracesFolder">
+                  </instanceof>
+               </iterate>
+            </and>
+         </activeWhen>
+      </handler>
       <handler
             class="org.eclipse.linuxtools.internal.tmf.ui.project.handlers.NewFolderHandler"
             commandId="org.eclipse.linuxtools.tmf.ui.command.new_folder">
index 9dda211b23588e2a873876d5dd8e641b0d1ab135..f512aba79424141c1940ddde379416dff52cb2aa 100644 (file)
@@ -19,6 +19,7 @@ import org.eclipse.core.commands.AbstractHandler;
 import org.eclipse.core.commands.ExecutionEvent;
 import org.eclipse.core.commands.ExecutionException;
 import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceVisitor;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.OperationCanceledException;
@@ -28,6 +29,7 @@ import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.linuxtools.internal.tmf.ui.Activator;
 import org.eclipse.linuxtools.tmf.ui.project.model.TmfTraceElement;
 import org.eclipse.linuxtools.tmf.ui.project.model.TmfTraceFolder;
+import org.eclipse.linuxtools.tmf.ui.project.model.TmfTracesFolder;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.MessageBox;
@@ -55,25 +57,27 @@ public class DeleteFolderHandler extends AbstractHandler {
             return null;
         }
 
+        // Get the selection
+        ISelection selection = HandlerUtil.getCurrentSelection(event);
+        if (!(selection instanceof IStructuredSelection)) {
+            return null;
+        }
+        final boolean isTracesFolder = ((IStructuredSelection) selection).iterator().next() instanceof TmfTracesFolder;
+
         // Confirm the operation
         Shell shell = window.getShell();
         MessageBox confirmOperation = new MessageBox(shell, SWT.ICON_QUESTION | SWT.CANCEL | SWT.OK);
-        confirmOperation.setText(Messages.DeleteDialog_Title);
-        confirmOperation.setMessage(Messages.DeleteFolderHandler_Message);
+        confirmOperation.setText(isTracesFolder ? Messages.ClearDialog_Title : Messages.DeleteDialog_Title);
+        confirmOperation.setMessage(isTracesFolder ? Messages.DeleteFolderHandlerClear_Message : Messages.DeleteFolderHandler_Message);
         if (confirmOperation.open() != SWT.OK) {
             return null;
         }
 
-        // Get the selection
-        ISelection selection = HandlerUtil.getCurrentSelection(event);
-        if (!(selection instanceof IStructuredSelection)) {
-            return null;
-        }
         final Iterator<Object> iterator = ((IStructuredSelection) selection).iterator();
 
         WorkspaceModifyOperation operation = new WorkspaceModifyOperation() {
             @Override
-            public void execute(IProgressMonitor monitor) throws CoreException {
+            public void execute(final IProgressMonitor monitor) throws CoreException {
                 monitor.beginTask("", 1000); //$NON-NLS-1$
                 while (iterator.hasNext()) {
                     if (monitor.isCanceled()) {
@@ -82,7 +86,7 @@ public class DeleteFolderHandler extends AbstractHandler {
                     Object element = iterator.next();
                     if (element instanceof TmfTraceFolder) {
                         final TmfTraceFolder folder = (TmfTraceFolder) element;
-                        IResource resource = folder.getResource();
+                        final IResource resource = folder.getResource();
 
                         try {
                             // delete all traces under this folder
@@ -90,14 +94,28 @@ public class DeleteFolderHandler extends AbstractHandler {
                                 traceElement.delete(null);
                             }
 
-                            // Finally, delete the folder
-                            resource.delete(true, monitor);
+                            // Finally, delete the folder. For the Traces
+                            // folder, we only delete the children since the
+                            // folder should always be there.
+                            if (folder instanceof TmfTracesFolder) {
+                                resource.accept(new IResourceVisitor() {
+                                    @Override
+                                    public boolean visit(IResource visitedResource) throws CoreException {
+                                        if (visitedResource != resource) {
+                                            visitedResource.delete(true, monitor);
+                                        }
+                                        return true;
+                                    }
+                                }, IResource.DEPTH_ONE, 0);
+                            } else {
+                                resource.delete(true, monitor);
+                            }
                         } 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.DeleteFolderHandler_Error + ' ' + folder.getName());
+                                    mb.setText(isTracesFolder ? Messages.DeleteFolderHandlerClear_Error : Messages.DeleteFolderHandler_Error + ' ' + folder.getName());
                                     mb.setMessage(e.getMessage());
                                     mb.open();
                                 }
index 8d2e0f4346cfaa2f72ab87287d7f2530a862124d..040ac2d7dc1a1faec4bfdc05e32424650f3bf2e7 100644 (file)
@@ -35,6 +35,10 @@ public class Messages extends NLS {
     public static String DeleteFolderHandler_Message;
     public static String DeleteFolderHandler_Error;
 
+    public static String ClearDialog_Title;
+    public static String DeleteFolderHandlerClear_Message;
+    public static String DeleteFolderHandlerClear_Error;
+
     public static String SelectTraceTypeHandler_ErrorSelectingTrace;
     public static String SelectTraceTypeHandler_Title;
     public static String SelectTraceTypeHandler_TraceFailedValidation;
index 4d680f09c4a179c39a1378b0345e8eaab762e411..7071a19c0c4491a4be4d3d693e4387871ce0776d 100644 (file)
@@ -20,6 +20,11 @@ DeleteExperimentHandler_Error = Error deleting experiment
 DeleteFolderHandler_Message = Are you sure you want to delete this folder?
 DeleteFolderHandler_Error = Error deleting folder
 
+# Clear message
+ClearDialog_Title = Confirm Clear
+DeleteFolderHandlerClear_Message = Are you sure you want to clear this folder?
+DeleteFolderHandlerClear_Error = Error clearing folder
+
 # Set Trace Type
 SelectTraceTypeHandler_ErrorSelectingTrace=Error selecting trace type for trace
 SelectTraceTypeHandler_Title = Validation Error
This page took 0.028629 seconds and 5 git commands to generate.