tmf: Perform cleanup when custom parser is modified or deleted
authorPatrick Tasse <patrick.tasse@gmail.com>
Fri, 13 Mar 2015 19:38:06 +0000 (15:38 -0400)
committerPatrick Tasse <patrick.tasse@gmail.com>
Tue, 17 Mar 2015 19:54:05 +0000 (15:54 -0400)
All traces in all projects which have the modified or deleted custom
parser's trace type should be closed and have their supplementary files
deleted.

Change-Id: I872cefb7e0aa9e3d9e6370766bb6319cb256d503
Signed-off-by: Patrick Tasse <patrick.tasse@gmail.com>
Reviewed-on: https://git.eclipse.org/r/43825
Reviewed-by: Hudson CI
Reviewed-by: Bernd Hufmann <bernd.hufmann@ericsson.com>
Tested-by: Bernd Hufmann <bernd.hufmann@ericsson.com>
org.eclipse.tracecompass.tmf.ui/META-INF/MANIFEST.MF
org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/dialogs/ManageCustomParsersDialog.java
org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/parsers/CustomParserUtils.java [new file with mode: 0644]
org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/parsers/wizards/CustomTxtParserWizard.java
org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/parsers/wizards/CustomXmlParserWizard.java

index 93b4faf4c3b2d85f83a60dcbdf5e476c6686d754..fe979eee57e80bc246b350da3610ec922003b589 100644 (file)
@@ -25,6 +25,7 @@ Export-Package: org.eclipse.tracecompass.internal.tmf.ui;x-friends:="org.eclipse
  org.eclipse.tracecompass.internal.tmf.ui.dialogs;x-internal:=true,
  org.eclipse.tracecompass.internal.tmf.ui.editors;x-internal:=true,
  org.eclipse.tracecompass.internal.tmf.ui.editors.handlers;x-internal:=true,
+ org.eclipse.tracecompass.internal.tmf.ui.parsers;x-internal:=true,
  org.eclipse.tracecompass.internal.tmf.ui.parsers.wizards;x-friends:="org.eclipse.tracecompass.tmf.ui.tests",
  org.eclipse.tracecompass.internal.tmf.ui.preferences;x-internal:=true,
  org.eclipse.tracecompass.internal.tmf.ui.project.dialogs;x-internal:=true,
index 29472e6e5d452d5ca5d03d1a60958d6f3d845612..a69b77ff82e578b1b69216094044f45dd248c93e 100644 (file)
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010, 2014 Ericsson
+ * Copyright (c) 2010, 2015 Ericsson
  *
  * All rights reserved. This program and the accompanying materials are
  * made available under the terms of the Eclipse Public License v1.0 which
@@ -34,10 +34,13 @@ import org.eclipse.swt.widgets.List;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.tracecompass.internal.tmf.ui.Activator;
 import org.eclipse.tracecompass.internal.tmf.ui.Messages;
+import org.eclipse.tracecompass.internal.tmf.ui.parsers.CustomParserUtils;
 import org.eclipse.tracecompass.internal.tmf.ui.parsers.wizards.CustomTxtParserWizard;
 import org.eclipse.tracecompass.internal.tmf.ui.parsers.wizards.CustomXmlParserWizard;
 import org.eclipse.tracecompass.tmf.core.parsers.custom.CustomTraceDefinition;
+import org.eclipse.tracecompass.tmf.core.parsers.custom.CustomTxtTrace;
 import org.eclipse.tracecompass.tmf.core.parsers.custom.CustomTxtTraceDefinition;
+import org.eclipse.tracecompass.tmf.core.parsers.custom.CustomXmlTrace;
 import org.eclipse.tracecompass.tmf.core.parsers.custom.CustomXmlTraceDefinition;
 import org.eclipse.tracecompass.tmf.core.project.model.TmfTraceType;
 import org.eclipse.tracecompass.tmf.core.project.model.TraceTypeHelper;
@@ -219,8 +222,10 @@ public class ManageCustomParsersDialog extends Dialog {
                     String name = selection.substring(selection.indexOf(SEP) + SEP_LEN);
                     if (txtButton.getSelection()) {
                         CustomTxtTraceDefinition.delete(category, name);
+                        CustomParserUtils.cleanup(CustomTxtTrace.buildTraceTypeId(category, name));
                     } else if (xmlButton.getSelection()) {
                         CustomXmlTraceDefinition.delete(category, name);
+                        CustomParserUtils.cleanup(CustomXmlTrace.buildTraceTypeId(category, name));
                     }
                     fillParserList();
                 }
diff --git a/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/parsers/CustomParserUtils.java b/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/parsers/CustomParserUtils.java
new file mode 100644 (file)
index 0000000..43d97fc
--- /dev/null
@@ -0,0 +1,83 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Ericsson
+ *
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   Patrick Tasse - Initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.tracecompass.internal.tmf.ui.parsers;
+
+import java.lang.reflect.InvocationTargetException;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.tracecompass.internal.tmf.ui.project.operations.TmfWorkspaceModifyOperation;
+import org.eclipse.tracecompass.tmf.core.TmfProjectNature;
+import org.eclipse.tracecompass.tmf.ui.project.model.TmfProjectElement;
+import org.eclipse.tracecompass.tmf.ui.project.model.TmfProjectRegistry;
+import org.eclipse.tracecompass.tmf.ui.project.model.TmfTraceElement;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * Custom parser utility methods.
+ *
+ * @author Patrick Tasse
+ *
+ */
+public class CustomParserUtils {
+
+    /**
+     * Perform required cleanup when a custom parser is modified or deleted.
+     *
+     * @param traceTypeId
+     *            the trace type id
+     */
+    public static void cleanup(@NonNull final String traceTypeId) {
+
+        /*
+         * Close all editors and delete supplementary files of traces with this trace type.
+         */
+        TmfWorkspaceModifyOperation operation = new TmfWorkspaceModifyOperation() {
+            @Override
+            public void execute(IProgressMonitor monitor) throws CoreException {
+                for (IProject project : ResourcesPlugin.getWorkspace().getRoot().getProjects()) {
+                    if (project.hasNature(TmfProjectNature.ID)) {
+                        TmfProjectElement projectElement = TmfProjectRegistry.getProject(project, true);
+                        for (final TmfTraceElement trace : projectElement.getTracesFolder().getTraces()) {
+                            if (monitor.isCanceled()) {
+                                throw new OperationCanceledException();
+                            }
+                            if (traceTypeId.equals(trace.getTraceType())) {
+                                Display.getDefault().syncExec(new Runnable() {
+                                    @Override
+                                    public void run() {
+                                        trace.closeEditors();
+                                    }
+                                });
+                                trace.deleteSupplementaryResources();
+                                trace.refreshSupplementaryFolder();
+                            }
+                        }
+                    }
+                }
+            }
+        };
+        try {
+            PlatformUI.getWorkbench().getProgressService().run(true, true, operation);
+        } catch (InterruptedException e) {
+        } catch (InvocationTargetException e) {
+            MessageDialog.openError(Display.getDefault().getActiveShell(), e.toString(), e.getTargetException().toString());
+        }
+    }
+}
index 8affbab32ff7cbbf399b7293cd008c6cda3ac7d2..67900612cdb837ebec0eb733d128acf9dad8ce20 100644 (file)
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010, 2014 Ericsson
+ * Copyright (c) 2010, 2015 Ericsson
  *
  * All rights reserved. This program and the accompanying materials are
  * made available under the terms of the Eclipse Public License v1.0 which
@@ -15,6 +15,8 @@ package org.eclipse.tracecompass.internal.tmf.ui.parsers.wizards;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.tracecompass.internal.tmf.ui.parsers.CustomParserUtils;
+import org.eclipse.tracecompass.tmf.core.parsers.custom.CustomTxtTrace;
 import org.eclipse.tracecompass.tmf.core.parsers.custom.CustomTxtTraceDefinition;
 import org.eclipse.ui.INewWizard;
 import org.eclipse.ui.IWorkbench;
@@ -58,9 +60,11 @@ public class CustomTxtParserWizard extends Wizard implements INewWizard {
     @Override
     public boolean performFinish() {
         CustomTxtTraceDefinition def = outputPage.getDefinition();
-        if (definition != null && (!initialCategoryName.equals(def.categoryName) ||
-                !initialDefinitionName.equals(def.definitionName))) {
-            CustomTxtTraceDefinition.delete(initialCategoryName, initialDefinitionName);
+        if (definition != null) {
+            if (!initialCategoryName.equals(def.categoryName) || !initialDefinitionName.equals(def.definitionName)) {
+                CustomTxtTraceDefinition.delete(initialCategoryName, initialDefinitionName);
+            }
+            CustomParserUtils.cleanup(CustomTxtTrace.buildTraceTypeId(initialCategoryName, initialDefinitionName));
         }
         def.save();
         return true;
index 8edbc953962eb9493abd8daa1d7adc093b4d6d66..32dde00c6c5d016744da81d1168041e91278de2a 100644 (file)
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010, 2014 Ericsson
+ * Copyright (c) 2010, 2015 Ericsson
  *
  * All rights reserved. This program and the accompanying materials are
  * made available under the terms of the Eclipse Public License v1.0 which
@@ -15,6 +15,8 @@ package org.eclipse.tracecompass.internal.tmf.ui.parsers.wizards;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.tracecompass.internal.tmf.ui.parsers.CustomParserUtils;
+import org.eclipse.tracecompass.tmf.core.parsers.custom.CustomXmlTrace;
 import org.eclipse.tracecompass.tmf.core.parsers.custom.CustomXmlTraceDefinition;
 import org.eclipse.ui.INewWizard;
 import org.eclipse.ui.IWorkbench;
@@ -58,9 +60,11 @@ public class CustomXmlParserWizard extends Wizard implements INewWizard {
     @Override
     public boolean performFinish() {
         CustomXmlTraceDefinition def = outputPage.getDefinition();
-        if (definition != null && (!initialCategoryName.equals(def.categoryName) ||
-                !initialDefinitionName.equals(def.definitionName))) {
-            CustomXmlTraceDefinition.delete(initialCategoryName, initialDefinitionName);
+        if (definition != null) {
+            if (!initialCategoryName.equals(def.categoryName) || !initialDefinitionName.equals(def.definitionName)) {
+                CustomXmlTraceDefinition.delete(initialCategoryName, initialDefinitionName);
+            }
+            CustomParserUtils.cleanup(CustomXmlTrace.buildTraceTypeId(initialCategoryName, initialDefinitionName));
         }
         def.save();
         return true;
This page took 0.029686 seconds and 5 git commands to generate.