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,
/*******************************************************************************
- * 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
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;
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();
}
--- /dev/null
+/*******************************************************************************
+ * 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());
+ }
+ }
+}
/*******************************************************************************
- * 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
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;
@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;
/*******************************************************************************
- * 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
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;
@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;