From 002f9f07639f06c5a20e3f9da3b279c1024695d5 Mon Sep 17 00:00:00 2001 From: Bernd Hufmann Date: Mon, 10 Feb 2014 21:10:58 -0500 Subject: [PATCH] Revert "tmf: Remove legacy import wizard" This reverts commit 38b5d28eb185cdee37a452d312f9ca91a2c7af2f. Change-Id: I4874e4a9347532df16eae1599d25b4faece0a998 Signed-off-by: Bernd Hufmann Reviewed-on: https://git.eclipse.org/r/21830 Tested-by: Hudson CI Reviewed-by: Marc-Andre Laperle IP-Clean: Marc-Andre Laperle Tested-by: Marc-Andre Laperle --- .../plugin.properties | 3 + org.eclipse.linuxtools.tmf.ui/plugin.xml | 52 +- .../handlers/BatchImportTraceHandler.java | 42 +- .../project/handlers/ImportTraceHandler.java | 98 ++ .../tmf/ui/project/wizards/Messages.java | 75 +- .../importtrace/BatchImportTraceWizard.java | 4 +- .../importtrace/ImportTraceWizard.java | 99 ++ .../importtrace/ImportTraceWizardPage.java | 882 ++++++++++++++++++ .../ui/project/wizards/messages.properties | 20 + 9 files changed, 1228 insertions(+), 47 deletions(-) create mode 100644 org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/internal/tmf/ui/project/handlers/ImportTraceHandler.java create mode 100644 org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/wizards/importtrace/ImportTraceWizard.java create mode 100644 org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/wizards/importtrace/ImportTraceWizardPage.java diff --git a/org.eclipse.linuxtools.tmf.ui/plugin.properties b/org.eclipse.linuxtools.tmf.ui/plugin.properties index 9610bfa1e2..d9fd42bff3 100644 --- a/org.eclipse.linuxtools.tmf.ui/plugin.properties +++ b/org.eclipse.linuxtools.tmf.ui/plugin.properties @@ -113,6 +113,9 @@ command.OpenDirectory.description = Opens a directory command.OpenDirectory.name = Open Directory command.OpenFile.label = Open Trace File... command.OpenDirectory.label = Open Trace Directory... +command.import = Import... +command.import.mnemonic = I +command.import.description = Import traces into project command.batch_import = Batch Import... command.batch_import.mnemonic = A diff --git a/org.eclipse.linuxtools.tmf.ui/plugin.xml b/org.eclipse.linuxtools.tmf.ui/plugin.xml index 6af00f9226..97a98cb6d9 100644 --- a/org.eclipse.linuxtools.tmf.ui/plugin.xml +++ b/org.eclipse.linuxtools.tmf.ui/plugin.xml @@ -150,6 +150,13 @@ id="org.eclipse.linuxtools.tmf.import.category" name="%project.new.category.name"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/internal/tmf/ui/project/handlers/BatchImportTraceHandler.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/internal/tmf/ui/project/handlers/BatchImportTraceHandler.java index 55e10ef5e2..ee71777787 100644 --- a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/internal/tmf/ui/project/handlers/BatchImportTraceHandler.java +++ b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/internal/tmf/ui/project/handlers/BatchImportTraceHandler.java @@ -12,20 +12,14 @@ package org.eclipse.linuxtools.internal.tmf.ui.project.handlers; -import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.ISelectionProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.StructuredSelection; -import org.eclipse.jface.viewers.TreeSelection; import org.eclipse.jface.wizard.WizardDialog; import org.eclipse.linuxtools.tmf.ui.project.model.TmfTraceFolder; import org.eclipse.linuxtools.tmf.ui.project.wizards.importtrace.BatchImportTraceWizard; 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.handlers.HandlerUtil; @@ -36,7 +30,7 @@ import org.eclipse.ui.handlers.HandlerUtil; * @author Matthew Khouzam * @since 2.0 */ -public class BatchImportTraceHandler extends AbstractHandler { +public class BatchImportTraceHandler extends ImportTraceHandler { @Override public Object execute(ExecutionEvent event) throws ExecutionException { @@ -65,38 +59,4 @@ public class BatchImportTraceHandler extends AbstractHandler { return null; } - /** - * @return the trace folder or null - */ - private static TmfTraceFolder getTraceFolder() { - // Check if we are closing down - IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); - if (window == null) { - return null; - } - - // Get the selection - IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); - IWorkbenchPart part = page.getActivePart(); - if (part == null) { - return null; - } - ISelectionProvider selectionProvider = part.getSite().getSelectionProvider(); - if (selectionProvider == null) { - return null; - } - ISelection selection = selectionProvider.getSelection(); - - TmfTraceFolder traceFolder = null; - if (selection instanceof TreeSelection) { - TreeSelection sel = (TreeSelection) selection; - // There should be only one item selected as per the plugin.xml - Object element = sel.getFirstElement(); - if (element instanceof TmfTraceFolder) { - traceFolder = (TmfTraceFolder) element; - } - } - return traceFolder; - } - } diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/internal/tmf/ui/project/handlers/ImportTraceHandler.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/internal/tmf/ui/project/handlers/ImportTraceHandler.java new file mode 100644 index 0000000000..bfa8bc5095 --- /dev/null +++ b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/internal/tmf/ui/project/handlers/ImportTraceHandler.java @@ -0,0 +1,98 @@ +/******************************************************************************* + * 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 + * accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Francois Chouinard - Initial API and implementation + *******************************************************************************/ + +package org.eclipse.linuxtools.internal.tmf.ui.project.handlers; + +import org.eclipse.core.commands.AbstractHandler; +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.ISelectionProvider; +import org.eclipse.jface.viewers.StructuredSelection; +import org.eclipse.jface.viewers.TreeSelection; +import org.eclipse.jface.wizard.WizardDialog; +import org.eclipse.linuxtools.tmf.ui.project.model.TmfTraceFolder; +import org.eclipse.linuxtools.tmf.ui.project.wizards.importtrace.ImportTraceWizard; +import org.eclipse.swt.widgets.Shell; +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; + +/** + * ImportTraceHandler + *

+ * Starts an ImportTraceWizard that will handle the lowly details. + */ +public class ImportTraceHandler extends AbstractHandler { + + // ------------------------------------------------------------------------ + // Execution + // ------------------------------------------------------------------------ + + @Override + public Object execute(ExecutionEvent event) throws ExecutionException { + + TmfTraceFolder traceFolder = getTraceFolder(); + if (traceFolder == null) { + return null; + } + // Fire the Import Trace Wizard + IWorkbench workbench = PlatformUI.getWorkbench(); + Shell shell = workbench.getActiveWorkbenchWindow().getShell(); + + ImportTraceWizard wizard = new ImportTraceWizard(); + wizard.init(PlatformUI.getWorkbench(), new StructuredSelection(traceFolder)); + WizardDialog dialog = new WizardDialog(shell, wizard); + dialog.open(); + + traceFolder.refresh(); + + return null; + } + + /** + * @return the trace folder or null + */ + protected TmfTraceFolder getTraceFolder() { + // Check if we are closing down + IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); + if (window == null) { + return null; + } + + // Get the selection + IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); + IWorkbenchPart part = page.getActivePart(); + if (part == null) { + return null; + } + ISelectionProvider selectionProvider = part.getSite().getSelectionProvider(); + if (selectionProvider == null) { + return null; + } + ISelection selection = selectionProvider.getSelection(); + + TmfTraceFolder traceFolder = null; + if (selection instanceof TreeSelection) { + TreeSelection sel = (TreeSelection) selection; + // There should be only one item selected as per the plugin.xml + Object element = sel.getFirstElement(); + if (element instanceof TmfTraceFolder) { + traceFolder = (TmfTraceFolder) element; + } + } + return traceFolder; + } + +} diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/wizards/Messages.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/wizards/Messages.java index 579232771c..8a4c5a1777 100644 --- a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/wizards/Messages.java +++ b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/wizards/Messages.java @@ -32,6 +32,78 @@ public class Messages extends NLS { * The dialog message of the new project wizard */ public static String NewProjectWizard_DialogMessage; + /** + * The dialog title of the import trace wizard + */ + public static String ImportTraceWizard_DialogTitle; + /** + * The title of the file system within the import trace wizard + */ + public static String ImportTraceWizard_FileSystemTitle; + /** + * The title of the the import trace wizard page. + */ + public static String ImportTraceWizard_ImportTrace; + /** + * The label of the directory location (import trace wizard) + */ + public static String ImportTraceWizard_DirectoryLocation; + /** + * The title of the select trace directory dialog (import trace wizard) + */ + public static String ImportTraceWizard_SelectTraceDirectoryTitle; + /** + * The message of the select trace directory dialog (import trace wizard) + */ + public static String ImportTraceWizard_SelectTraceDirectoryMessage; + /** + * The title of the trace type label (import trace wizard) + */ + public static String ImportTraceWizard_TraceType; + /** + * The label of the overwrite checkbox (import trace wizard) + */ + public static String ImportTraceWizard_OverwriteExistingTrace; + /** + * The label of the checkbox to create a link to the trace in workspace (import trace wizard) + */ + public static String ImportTraceWizard_CreateLinksInWorkspace; + /** + * The error message for invalid trace directory (import trace wizard) + */ + public static String ImportTraceWizard_InvalidTraceDirectory; + /** + * The error message when a trace validation failed (import trace wizard). + */ + public static String ImportTraceWizard_TraceValidationFailed; + /** + * The error message when trace source is empty (import trace wizard). + */ + public static String ImportTraceWizard_SelectTraceSourceEmpty; + /** + * The error message when no trace is selected (import trace wizard). + */ + public static String ImportTraceWizard_SelectTraceNoneSelected; + /** + * The error message when an error occurred during import operation. + */ + public static String ImportTraceWizard_ImportProblem; + /** + * The error message if destination directory is a virtual folder. + */ + public static String ImportTraceWizard_CannotImportFilesUnderAVirtualFolder; + /** + * The error message if destination directory is a virtual folder (for a link). + */ + public static String ImportTraceWizard_HaveToCreateLinksUnderAVirtualFolder; + /** + * The label string of the browse button. + */ + public static String ImportTraceWizard_BrowseButton; + /** + * The information label string. + */ + public static String ImportTraceWizard_Information; /** * The title of the select traces wizard. */ @@ -49,8 +121,7 @@ public class Messages extends NLS { */ public static String SelectTracesWizardPage_Description; /** - * The error message when no name was entered in a dialog box (new trace or - * experiment dialog) + * The error message when no name was entered in a dialog box (new trace or experiment dialog) */ public static String Dialog_EmptyNameError; /** diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/wizards/importtrace/BatchImportTraceWizard.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/wizards/importtrace/BatchImportTraceWizard.java index 28005c3c0b..dee705ceda 100644 --- a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/wizards/importtrace/BatchImportTraceWizard.java +++ b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/wizards/importtrace/BatchImportTraceWizard.java @@ -45,7 +45,6 @@ import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.wizard.IWizardPage; -import org.eclipse.jface.wizard.Wizard; import org.eclipse.jface.wizard.WizardDialog; import org.eclipse.linuxtools.internal.tmf.ui.Activator; import org.eclipse.linuxtools.internal.tmf.ui.project.model.TmfImportHelper; @@ -58,7 +57,6 @@ import org.eclipse.linuxtools.tmf.ui.project.model.TmfProjectRegistry; 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.TmfTraceTypeUIUtils; -import org.eclipse.ui.IImportWizard; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.dialogs.IOverwriteQuery; import org.eclipse.ui.wizards.datatransfer.FileSystemStructureProvider; @@ -70,7 +68,7 @@ import org.eclipse.ui.wizards.datatransfer.ImportOperation; * @author Matthew Khouzam * @since 2.0 */ -public class BatchImportTraceWizard extends Wizard implements IImportWizard { +public class BatchImportTraceWizard extends ImportTraceWizard { private static final int WIN_HEIGHT = 400; private static final int WIN_WIDTH = 800; diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/wizards/importtrace/ImportTraceWizard.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/wizards/importtrace/ImportTraceWizard.java new file mode 100644 index 0000000000..b56a2dd6ef --- /dev/null +++ b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/wizards/importtrace/ImportTraceWizard.java @@ -0,0 +1,99 @@ +/******************************************************************************* + * Copyright (c) 2010, 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 + * accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Francois Chouinard - Initial API and implementation + *******************************************************************************/ + +package org.eclipse.linuxtools.tmf.ui.project.wizards.importtrace; + +import java.util.List; + +import org.eclipse.jface.dialogs.IDialogSettings; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.viewers.StructuredSelection; +import org.eclipse.jface.wizard.Wizard; +import org.eclipse.linuxtools.internal.tmf.ui.Activator; +import org.eclipse.linuxtools.tmf.ui.project.wizards.Messages; +import org.eclipse.ui.IImportWizard; +import org.eclipse.ui.IWorkbench; +import org.eclipse.ui.ide.IDE; +import org.eclipse.ui.plugin.AbstractUIPlugin; + +/** + * The import trace wizard implementation. + *

+ * @version 1.0 + * @author Francois Chouinard + * @since 2.0 + */ +public class ImportTraceWizard extends Wizard implements IImportWizard { + + // ------------------------------------------------------------------------ + // Constants + // ------------------------------------------------------------------------ + + static private final String PLUGIN_ID = Activator.PLUGIN_ID; + static private final String IMPORT_WIZARD = "ImportTraceWizard"; //$NON-NLS-1$ + static private final String ICON_PATH = "icons/wizban/trace_import_wiz.png"; //$NON-NLS-1$ + + // ------------------------------------------------------------------------ + // Attributes + // ------------------------------------------------------------------------ + + private IWorkbench fWorkbench; + private IStructuredSelection fSelection; + private ImportTraceWizardPage fTraceImportWizardPage; + + // ------------------------------------------------------------------------ + // Constructor + // ------------------------------------------------------------------------ + /** + * Default constructor + */ + public ImportTraceWizard() { + IDialogSettings workbenchSettings = Activator.getDefault().getDialogSettings(); + IDialogSettings section = workbenchSettings.getSection(IMPORT_WIZARD); + if (section == null) { + section = workbenchSettings.addNewSection(IMPORT_WIZARD); + } + setDialogSettings(section); + } + + // ------------------------------------------------------------------------ + // Wizard + // ------------------------------------------------------------------------ + + @Override + public void init(IWorkbench workbench, IStructuredSelection selection) { + fWorkbench = workbench; + fSelection = selection; + + List selectedResources = IDE.computeSelectedResources(selection); + if (!selectedResources.isEmpty()) { + fSelection = new StructuredSelection(selectedResources); + } + + setWindowTitle(Messages.ImportTraceWizard_DialogTitle); + setDefaultPageImageDescriptor(AbstractUIPlugin.imageDescriptorFromPlugin(PLUGIN_ID, ICON_PATH)); + setNeedsProgressMonitor(true); + } + + @Override + public void addPages() { + super.addPages(); + fTraceImportWizardPage = new ImportTraceWizardPage(fWorkbench, fSelection); + addPage(fTraceImportWizardPage); + } + + @Override + public boolean performFinish() { + return fTraceImportWizardPage.finish(); + } + +} diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/wizards/importtrace/ImportTraceWizardPage.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/wizards/importtrace/ImportTraceWizardPage.java new file mode 100644 index 0000000000..ea096d8f1d --- /dev/null +++ b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/wizards/importtrace/ImportTraceWizardPage.java @@ -0,0 +1,882 @@ +/******************************************************************************* + * Copyright (c) 2009, 2013 Ericsson and others. + * + * 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: + * Francois Chouinard - Initial API and implementation + * Francois Chouinard - Got rid of dependency on internal platform class + * Francois Chouinard - Complete re-design + * Anna Dushistova(Montavista) - [383047] NPE while importing a CFT trace + * Matthew Khouzam - Moved out some common functions + * Patrick Tasse - Add sorting of file system elements + *******************************************************************************/ + +package org.eclipse.linuxtools.tmf.ui.project.wizards.importtrace; + +import java.io.File; +import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import org.eclipse.core.resources.IContainer; +import org.eclipse.core.resources.IFolder; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IResource; +import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Path; +import org.eclipse.core.runtime.Platform; +import org.eclipse.jface.dialogs.ErrorDialog; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.jface.viewers.CheckStateChangedEvent; +import org.eclipse.jface.viewers.CheckboxTreeViewer; +import org.eclipse.jface.viewers.ICheckStateListener; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.viewers.ITreeContentProvider; +import org.eclipse.linuxtools.internal.tmf.ui.Activator; +import org.eclipse.linuxtools.tmf.core.TmfProjectNature; +import org.eclipse.linuxtools.tmf.core.project.model.TmfTraceType; +import org.eclipse.linuxtools.tmf.core.project.model.TraceTypeHelper; +import org.eclipse.linuxtools.tmf.ui.project.model.TmfProjectElement; +import org.eclipse.linuxtools.tmf.ui.project.model.TmfProjectRegistry; +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.TmfTraceTypeUIUtils; +import org.eclipse.linuxtools.tmf.ui.project.wizards.Messages; +import org.eclipse.swt.SWT; +import org.eclipse.swt.custom.BusyIndicator; +import org.eclipse.swt.events.FocusEvent; +import org.eclipse.swt.events.FocusListener; +import org.eclipse.swt.events.KeyEvent; +import org.eclipse.swt.events.KeyListener; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.events.SelectionListener; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Combo; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.DirectoryDialog; +import org.eclipse.swt.widgets.Event; +import org.eclipse.swt.widgets.Group; +import org.eclipse.swt.widgets.Label; +import org.eclipse.ui.IWorkbench; +import org.eclipse.ui.dialogs.FileSystemElement; +import org.eclipse.ui.dialogs.WizardResourceImportPage; +import org.eclipse.ui.model.WorkbenchContentProvider; +import org.eclipse.ui.model.WorkbenchLabelProvider; +import org.eclipse.ui.wizards.datatransfer.FileSystemStructureProvider; +import org.eclipse.ui.wizards.datatransfer.IImportStructureProvider; +import org.eclipse.ui.wizards.datatransfer.ImportOperation; + +/** + * A variant of the standard resource import wizard with the following changes: + *

    + *
  • A folder/file combined checkbox tree viewer to select traces + *
  • Cherry-picking of traces in the file structure without re-creating the + * file hierarchy + *
  • A trace types dropbox for optional characterization + *
+ * For our purpose, a trace can either be a single file or a whole directory + * sub-tree, whichever is reached first from the root directory. + *

+ * + * @version 1.0 + * @author Francois Chouinard + * @since 2.0 + */ +public class ImportTraceWizardPage extends WizardResourceImportPage { + + // ------------------------------------------------------------------------ + // Classes + // ------------------------------------------------------------------------ + + private static class FileSystemElementComparator implements Comparator { + + FileSystemStructureProvider provider = FileSystemStructureProvider.INSTANCE; + + @Override + public int compare(Object o1, Object o2) { + String label1 = provider.getLabel(o1); + String label2 = provider.getLabel(o2); + return label1.compareTo(label2); + } + + } + + // ------------------------------------------------------------------------ + // Constants + // ------------------------------------------------------------------------ + + private static final String IMPORT_WIZARD_PAGE = "ImportTraceWizardPage"; //$NON-NLS-1$ + private static final FileSystemElementComparator FILE_SYSTEM_ELEMENT_COMPARATOR = new FileSystemElementComparator(); + + // ------------------------------------------------------------------------ + // Attributes + // ------------------------------------------------------------------------ + + // Folder navigation start point (saved between invocations) + private static String fRootDirectory = null; + + // Navigation folder content viewer and selector + private CheckboxTreeViewer fFolderViewer; + + // Target import directory ('Traces' folder) + private IFolder fTargetFolder; + private static final String SEPARATOR = ":"; //$NON-NLS-1$ + + // ------------------------------------------------------------------------ + // Constructors + // ------------------------------------------------------------------------ + + /** + * Constructor. Creates the trace wizard page. + * + * @param name + * The name of the page. + * @param selection + * The current selection + */ + protected ImportTraceWizardPage(String name, IStructuredSelection selection) { + super(name, selection); + } + + /** + * Constructor + * + * @param workbench + * The workbench reference. + * @param selection + * The current selection + */ + public ImportTraceWizardPage(IWorkbench workbench, IStructuredSelection selection) { + this(IMPORT_WIZARD_PAGE, selection); + setTitle(Messages.ImportTraceWizard_FileSystemTitle); + setDescription(Messages.ImportTraceWizard_ImportTrace); + + // Locate the target trace folder + IFolder traceFolder = null; + Object element = selection.getFirstElement(); + + if (element instanceof TmfTraceFolder) { + TmfTraceFolder tmfTraceFolder = (TmfTraceFolder) element; + tmfTraceFolder.getProject().getResource(); + traceFolder = tmfTraceFolder.getResource(); + } else if (element instanceof IProject) { + IProject project = (IProject) element; + try { + if (project.hasNature(TmfProjectNature.ID)) { + traceFolder = (IFolder) project.findMember(TmfTraceFolder.TRACE_FOLDER_NAME); + } + } catch (CoreException e) { + } + } + + // Set the target trace folder + if (traceFolder != null) { + fTargetFolder = traceFolder; + String path = traceFolder.getFullPath().toOSString(); + setContainerFieldValue(path); + } + } + + // ------------------------------------------------------------------------ + // WizardResourceImportPage + // ------------------------------------------------------------------------ + + @Override + public void createControl(Composite parent) { + super.createControl(parent); + // Restore last directory if applicable + if (fRootDirectory != null) { + directoryNameField.setText(fRootDirectory); + updateFromSourceField(); + } + } + + @Override + protected void createSourceGroup(Composite parent) { + createDirectorySelectionGroup(parent); + createFileSelectionGroup(parent); + createTraceTypeGroup(parent); + validateSourceGroup(); + } + + @Override + protected void createFileSelectionGroup(Composite parent) { + + // This Composite is only used for widget alignment purposes + Composite composite = new Composite(parent, SWT.NONE); + composite.setFont(parent.getFont()); + GridLayout layout = new GridLayout(); + composite.setLayout(layout); + composite.setLayoutData(new GridData(GridData.FILL_BOTH)); + + final int PREFERRED_LIST_HEIGHT = 150; + + fFolderViewer = new CheckboxTreeViewer(composite, SWT.BORDER); + GridData data = new GridData(GridData.FILL_BOTH); + data.heightHint = PREFERRED_LIST_HEIGHT; + fFolderViewer.getTree().setLayoutData(data); + fFolderViewer.getTree().setFont(parent.getFont()); + + fFolderViewer.setContentProvider(getFileProvider()); + fFolderViewer.setLabelProvider(new WorkbenchLabelProvider()); + fFolderViewer.addCheckStateListener(new ICheckStateListener() { + @Override + public void checkStateChanged(CheckStateChangedEvent event) { + Object elem = event.getElement(); + if (elem instanceof FileSystemElement) { + FileSystemElement element = (FileSystemElement) elem; + if (fFolderViewer.getGrayed(element)) { + fFolderViewer.setSubtreeChecked(element, false); + fFolderViewer.setGrayed(element, false); + } else if (event.getChecked()) { + fFolderViewer.setSubtreeChecked(event.getElement(), true); + } else { + fFolderViewer.setParentsGrayed(element, true); + if (!element.isDirectory()) { + fFolderViewer.setGrayed(element, false); + } + } + updateWidgetEnablements(); + } + } + }); + } + + @Override + protected ITreeContentProvider getFolderProvider() { + return null; + } + + @Override + protected ITreeContentProvider getFileProvider() { + return new WorkbenchContentProvider() { + @Override + public Object[] getChildren(Object o) { + if (o instanceof FileSystemElement) { + FileSystemElement element = (FileSystemElement) o; + populateChildren(element); + // For our purpose, we need folders + files + Object[] folders = element.getFolders().getChildren(); + Object[] files = element.getFiles().getChildren(); + + List result = new LinkedList<>(); + for (Object folder : folders) { + result.add(folder); + } + for (Object file : files) { + result.add(file); + } + + return result.toArray(); + } + return new Object[0]; + } + }; + } + + private static void populateChildren(FileSystemElement parent) { + // Do not re-populate if the job was done already... + FileSystemStructureProvider provider = FileSystemStructureProvider.INSTANCE; + if (parent.getFolders().size() == 0 && parent.getFiles().size() == 0) { + Object fileSystemObject = parent.getFileSystemObject(); + List children = provider.getChildren(fileSystemObject); + if (children != null) { + Collections.sort(children, FILE_SYSTEM_ELEMENT_COMPARATOR); + Iterator iterator = children.iterator(); + while (iterator.hasNext()) { + Object child = iterator.next(); + String label = provider.getLabel(child); + FileSystemElement element = new FileSystemElement(label, parent, provider.isFolder(child)); + element.setFileSystemObject(child); + } + } + } + } + + @Override + protected List getSelectedResources() { + List resources = new ArrayList<>(); + Object[] checkedItems = fFolderViewer.getCheckedElements(); + for (Object item : checkedItems) { + if (item instanceof FileSystemElement && !fFolderViewer.getGrayed(item)) { + resources.add((FileSystemElement) item); + } + } + return resources; + } + + // ------------------------------------------------------------------------ + // Directory Selection Group (forked WizardFileSystemResourceImportPage1) + // ------------------------------------------------------------------------ + + /** + * The directory name field + */ + protected Combo directoryNameField; + /** + * The directory browse button. + */ + protected Button directoryBrowseButton; + + private boolean entryChanged = false; + + /** + * creates the directory selection group. + * + * @param parent + * the parent composite + */ + protected void createDirectorySelectionGroup(Composite parent) { + + Composite directoryContainerGroup = new Composite(parent, SWT.NONE); + GridLayout layout = new GridLayout(); + layout.numColumns = 3; + directoryContainerGroup.setLayout(layout); + directoryContainerGroup.setFont(parent.getFont()); + directoryContainerGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); + + // Label ("Trace directory:") + Label groupLabel = new Label(directoryContainerGroup, SWT.NONE); + groupLabel.setText(Messages.ImportTraceWizard_DirectoryLocation); + groupLabel.setFont(parent.getFont()); + + // Directory name entry field + directoryNameField = new Combo(directoryContainerGroup, SWT.BORDER); + GridData data = new GridData(SWT.FILL, SWT.FILL, true, false); + data.widthHint = SIZING_TEXT_FIELD_WIDTH; + directoryNameField.setLayoutData(data); + directoryNameField.setFont(parent.getFont()); + + directoryNameField.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + updateFromSourceField(); + } + }); + + directoryNameField.addKeyListener(new KeyListener() { + @Override + public void keyPressed(KeyEvent e) { + // If there has been a key pressed then mark as dirty + entryChanged = true; + if (e.character == SWT.CR) { // Windows... + entryChanged = false; + updateFromSourceField(); + } + } + + @Override + public void keyReleased(KeyEvent e) { + } + }); + + directoryNameField.addFocusListener(new FocusListener() { + @Override + public void focusGained(FocusEvent e) { + // Do nothing when getting focus + } + + @Override + public void focusLost(FocusEvent e) { + // Clear the flag to prevent constant update + if (entryChanged) { + entryChanged = false; + updateFromSourceField(); + } + } + }); + + // Browse button + directoryBrowseButton = new Button(directoryContainerGroup, SWT.PUSH); + directoryBrowseButton.setText(Messages.ImportTraceWizard_BrowseButton); + directoryBrowseButton.addListener(SWT.Selection, this); + directoryBrowseButton.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false)); + directoryBrowseButton.setFont(parent.getFont()); + setButtonLayoutData(directoryBrowseButton); + } + + // ------------------------------------------------------------------------ + // Browse for the source directory + // ------------------------------------------------------------------------ + + @Override + public void handleEvent(Event event) { + if (event.widget == directoryBrowseButton) { + handleSourceDirectoryBrowseButtonPressed(); + } + super.handleEvent(event); + } + + /** + * Handle the button pressed event + */ + protected void handleSourceDirectoryBrowseButtonPressed() { + String currentSource = directoryNameField.getText(); + DirectoryDialog dialog = new DirectoryDialog(directoryNameField.getShell(), SWT.SAVE | SWT.SHEET); + dialog.setText(Messages.ImportTraceWizard_SelectTraceDirectoryTitle); + dialog.setMessage(Messages.ImportTraceWizard_SelectTraceDirectoryMessage); + dialog.setFilterPath(getSourceDirectoryName(currentSource)); + + String selectedDirectory = dialog.open(); + if (selectedDirectory != null) { + // Just quit if the directory is not valid + if ((getSourceDirectory(selectedDirectory) == null) || selectedDirectory.equals(currentSource)) { + return; + } + // If it is valid then proceed to populate + setErrorMessage(null); + setSourceName(selectedDirectory); + } + } + + private File getSourceDirectory() { + return getSourceDirectory(directoryNameField.getText()); + } + + private static File getSourceDirectory(String path) { + File sourceDirectory = new File(getSourceDirectoryName(path)); + if (!sourceDirectory.exists() || !sourceDirectory.isDirectory()) { + return null; + } + + return sourceDirectory; + } + + private static String getSourceDirectoryName(String sourceName) { + IPath result = new Path(sourceName.trim()); + if (result.getDevice() != null && result.segmentCount() == 0) { + result = result.addTrailingSeparator(); + } else { + result = result.removeTrailingSeparator(); + } + return result.toOSString(); + } + + private String getSourceDirectoryName() { + return getSourceDirectoryName(directoryNameField.getText()); + } + + private void updateFromSourceField() { + setSourceName(directoryNameField.getText()); + updateWidgetEnablements(); + } + + private void setSourceName(String path) { + if (path.length() > 0) { + String[] currentItems = directoryNameField.getItems(); + int selectionIndex = -1; + for (int i = 0; i < currentItems.length; i++) { + if (currentItems[i].equals(path)) { + selectionIndex = i; + } + } + if (selectionIndex < 0) { + int oldLength = currentItems.length; + String[] newItems = new String[oldLength + 1]; + System.arraycopy(currentItems, 0, newItems, 0, oldLength); + newItems[oldLength] = path; + directoryNameField.setItems(newItems); + selectionIndex = oldLength; + } + directoryNameField.select(selectionIndex); + } + resetSelection(); + } + + // ------------------------------------------------------------------------ + // File Selection Group (forked WizardFileSystemResourceImportPage1) + // ------------------------------------------------------------------------ + + private void resetSelection() { + FileSystemElement root = getFileSystemTree(); + populateListViewer(root); + } + + private void populateListViewer(final Object treeElement) { + fFolderViewer.setInput(treeElement); + } + + private FileSystemElement getFileSystemTree() { + File sourceDirectory = getSourceDirectory(); + if (sourceDirectory == null) { + return null; + } + return selectFiles(sourceDirectory, FileSystemStructureProvider.INSTANCE); + } + + private FileSystemElement selectFiles(final Object rootFileSystemObject, final IImportStructureProvider structureProvider) { + final FileSystemElement[] results = new FileSystemElement[1]; + BusyIndicator.showWhile(getShell().getDisplay(), new Runnable() { + @Override + public void run() { + // Create the root element from the supplied file system object + results[0] = createRootElement(rootFileSystemObject, structureProvider); + } + }); + return results[0]; + } + + private static FileSystemElement createRootElement(Object fileSystemObject, + IImportStructureProvider provider) { + + boolean isContainer = provider.isFolder(fileSystemObject); + String elementLabel = provider.getLabel(fileSystemObject); + + FileSystemElement dummyParent = new FileSystemElement("", null, true); //$NON-NLS-1$ + FileSystemElement element = new FileSystemElement(elementLabel, dummyParent, isContainer); + element.setFileSystemObject(fileSystemObject); + + // Get the first level + populateChildren(element); + + return dummyParent; + } + + // ------------------------------------------------------------------------ + // Trace Type Group + // ------------------------------------------------------------------------ + + private Combo fTraceTypes; + + private final void createTraceTypeGroup(Composite parent) { + Composite composite = new Composite(parent, SWT.NONE); + GridLayout layout = new GridLayout(); + layout.numColumns = 3; + layout.makeColumnsEqualWidth = false; + composite.setLayout(layout); + composite.setFont(parent.getFont()); + GridData buttonData = new GridData(SWT.FILL, SWT.FILL, true, false); + composite.setLayoutData(buttonData); + + // Trace type label ("Trace Type:") + Label typeLabel = new Label(composite, SWT.NONE); + typeLabel.setText(Messages.ImportTraceWizard_TraceType); + typeLabel.setFont(parent.getFont()); + + // Trace type combo + fTraceTypes = new Combo(composite, SWT.BORDER); + GridData data = new GridData(SWT.FILL, SWT.FILL, true, false, 2, 1); + fTraceTypes.setLayoutData(data); + fTraceTypes.setFont(parent.getFont()); + + String[] availableTraceTypes = TmfTraceType.getInstance().getAvailableTraceTypes(); + fTraceTypes.setItems(availableTraceTypes); + + fTraceTypes.addSelectionListener(new SelectionListener() { + @Override + public void widgetSelected(SelectionEvent e) { + updateWidgetEnablements(); + } + + @Override + public void widgetDefaultSelected(SelectionEvent e) { + } + }); + } + + // ------------------------------------------------------------------------ + // Options + // ------------------------------------------------------------------------ + + private Button overwriteExistingResourcesCheckbox; + private Button createLinksInWorkspaceButton; + + @Override + protected void createOptionsGroupButtons(Group optionsGroup) { + + // Overwrite checkbox + overwriteExistingResourcesCheckbox = new Button(optionsGroup, SWT.CHECK); + overwriteExistingResourcesCheckbox.setFont(optionsGroup.getFont()); + overwriteExistingResourcesCheckbox.setText(Messages.ImportTraceWizard_OverwriteExistingTrace); + overwriteExistingResourcesCheckbox.setSelection(false); + + // Create links checkbox + createLinksInWorkspaceButton = new Button(optionsGroup, SWT.CHECK); + createLinksInWorkspaceButton.setFont(optionsGroup.getFont()); + createLinksInWorkspaceButton.setText(Messages.ImportTraceWizard_CreateLinksInWorkspace); + createLinksInWorkspaceButton.setSelection(true); + + createLinksInWorkspaceButton.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + updateWidgetEnablements(); + } + }); + + updateWidgetEnablements(); + } + + // ------------------------------------------------------------------------ + // Determine if the finish button can be enabled + // ------------------------------------------------------------------------ + + @Override + public boolean validateSourceGroup() { + + File sourceDirectory = getSourceDirectory(); + if (sourceDirectory == null) { + setMessage(Messages.ImportTraceWizard_SelectTraceSourceEmpty); + return false; + } + + if (sourceConflictsWithDestination(new Path(sourceDirectory.getPath()))) { + setMessage(null); + setErrorMessage(getSourceConflictMessage()); + return false; + } + + List resourcesToImport = getSelectedResources(); + if (resourcesToImport.size() == 0) { + setMessage(null); + setErrorMessage(Messages.ImportTraceWizard_SelectTraceNoneSelected); + return false; + } + + IContainer container = getSpecifiedContainer(); + if (container != null && container.isVirtual()) { + if (Platform.getPreferencesService().getBoolean(Activator.PLUGIN_ID, ResourcesPlugin.PREF_DISABLE_LINKING, false, null)) { + setMessage(null); + setErrorMessage(Messages.ImportTraceWizard_CannotImportFilesUnderAVirtualFolder); + return false; + } + if (createLinksInWorkspaceButton == null || !createLinksInWorkspaceButton.getSelection()) { + setMessage(null); + setErrorMessage(Messages.ImportTraceWizard_HaveToCreateLinksUnderAVirtualFolder); + return false; + } + } + + // Perform trace validation + String traceTypeName = fTraceTypes.getText(); + String tokens[] = traceTypeName.split(SEPARATOR, 2); + if (tokens.length >= 2) { + String id = TmfTraceType.getInstance().getTraceTypeId(tokens[0], tokens[1]); + if (!TmfTraceTypeUIUtils.validateTrace(TmfTraceType.getInstance(), id, getSelectedResources())) { + setMessage(null); + setErrorMessage(Messages.ImportTraceWizard_TraceValidationFailed); + return false; + } + } + setErrorMessage(null); + return true; + } + + // ------------------------------------------------------------------------ + // Import the trace(s) + // ------------------------------------------------------------------------ + + /** + * Finish the import. + * + * @return true if successful else false + */ + public boolean finish() { + // Ensure source is valid + File sourceDir = new File(getSourceDirectoryName()); + if (!sourceDir.isDirectory()) { + setErrorMessage(Messages.ImportTraceWizard_InvalidTraceDirectory); + return false; + } + + try { + sourceDir.getCanonicalPath(); + } catch (IOException e) { + MessageDialog.openInformation(getContainer().getShell(), Messages.ImportTraceWizard_Information, + Messages.ImportTraceWizard_InvalidTraceDirectory); + return false; + } + + // Save directory for next import operation + fRootDirectory = getSourceDirectoryName(); + + List selectedResources = getSelectedResources(); + Iterator resources = selectedResources.iterator(); + + // Use a map to end up with unique resources (getSelectedResources() can + // return duplicates) + Map fileSystemObjects = new HashMap<>(); + while (resources.hasNext()) { + File file = (File) resources.next().getFileSystemObject(); + String key = file.getAbsolutePath(); + fileSystemObjects.put(key, file); + } + + if (fileSystemObjects.size() > 0) { + boolean ok = importResources(fileSystemObjects); + String traceTypeName = fTraceTypes.getText(); + boolean traceTypeOK = false; + TraceTypeHelper traceTypeHelper = null; + + if (!traceTypeName.isEmpty()) { + // Trace type was selected + String temp[] = traceTypeName.split(SEPARATOR, 2); + if (temp.length < 2) { + Activator.getDefault().logError("Error with trace type " + traceTypeName); //$NON-NLS-1$ + return false; + } + final String traceId = TmfTraceType.getInstance().getTraceTypeId(temp[0], temp[1]); + if (traceId != null) { + traceTypeHelper = TmfTraceType.getInstance().getTraceType(traceId); + if (traceTypeHelper == null || !TmfTraceTypeUIUtils.validateTrace(TmfTraceType.getInstance(), traceId, getSelectedResources())) { + setMessage(null); + setErrorMessage(Messages.ImportTraceWizard_TraceValidationFailed); + return false; + } + + traceTypeOK = true; + } else { + setMessage(null); + setErrorMessage(Messages.ImportTraceWizard_TraceValidationFailed); + return false; + } + } + + if (ok && traceTypeOK) { + // Tag the selected traces with their type + List files = new ArrayList<>(fileSystemObjects.keySet()); + Collections.sort(files, new Comparator() { + @Override + public int compare(String o1, String o2) { + String v1 = o1 + File.separatorChar; + String v2 = o2 + File.separatorChar; + return v1.compareTo(v2); + } + }); + // After sorting, traces correspond to the unique prefixes + String prefix = null; + for (int i = 0; i < files.size(); i++) { + File file = fileSystemObjects.get(files.get(i)); + String name = file.getAbsolutePath() + File.separatorChar; + if (fTargetFolder != null && (prefix == null || !name.startsWith(prefix))) { + prefix = name; // new prefix + IResource resource = fTargetFolder.findMember(file.getName()); + if (resource != null) { + try { + TmfTraceTypeUIUtils.setTraceType(resource.getFullPath(), traceTypeHelper); + + TmfProjectElement tmfProject = TmfProjectRegistry.getProject(resource.getProject()); + if (tmfProject != null) { + for (TmfTraceElement traceElement : tmfProject.getTracesFolder().getTraces()) { + if (traceElement.getName().equals(resource.getName())) { + traceElement.refreshTraceType(); + break; + } + } + } + } catch (CoreException e) { + Activator.getDefault().logError("Error importing trace resource " + resource.getName(), e); //$NON-NLS-1$ + } + } + } + } + } + return ok; + } + + MessageDialog.openInformation(getContainer().getShell(), Messages.ImportTraceWizard_Information, + Messages.ImportTraceWizard_SelectTraceNoneSelected); + return false; + } + + private boolean importResources(Map fileSystemObjects) { + + // Determine the sorted canonical list of items to import + List fileList = new ArrayList<>(); + for (Entry entry : fileSystemObjects.entrySet()) { + fileList.add(entry.getValue()); + } + Collections.sort(fileList, new Comparator() { + @Override + public int compare(File o1, File o2) { + String v1 = o1.getAbsolutePath() + File.separatorChar; + String v2 = o2.getAbsolutePath() + File.separatorChar; + return v1.compareTo(v2); + } + }); + + // Perform a distinct import operation for everything that has the same + // prefix + // (distinct prefixes correspond to traces - we don't want to re-create + // parent structures) + boolean ok = true; + boolean isLinked = createLinksInWorkspaceButton.getSelection(); + for (int i = 0; i < fileList.size(); i++) { + File resource = fileList.get(i); + File parentFolder = new File(resource.getParent()); + + List subList = new ArrayList<>(); + subList.add(resource); + if (resource.isDirectory()) { + String prefix = resource.getAbsolutePath() + File.separatorChar; + boolean hasSamePrefix = true; + for (int j = i + 1; j < fileList.size() && hasSamePrefix; j++) { + File res = fileList.get(j); + hasSamePrefix = res.getAbsolutePath().startsWith(prefix); + if (hasSamePrefix) { + // Import children individually if not linked + if (!isLinked) { + subList.add(res); + } + i = j; + } + } + } + + // Perform the import operation for this subset + FileSystemStructureProvider fileSystemStructureProvider = FileSystemStructureProvider.INSTANCE; + ImportOperation operation = new ImportOperation(getContainerFullPath(), parentFolder, fileSystemStructureProvider, this, + subList); + operation.setContext(getShell()); + ok = executeImportOperation(operation); + } + + return ok; + } + + private boolean executeImportOperation(ImportOperation op) { + initializeOperation(op); + + try { + getContainer().run(true, true, op); + } catch (InterruptedException e) { + return false; + } catch (InvocationTargetException e) { + displayErrorDialog(e.getTargetException()); + return false; + } + + IStatus status = op.getStatus(); + if (!status.isOK()) { + ErrorDialog.openError(getContainer().getShell(), Messages.ImportTraceWizard_ImportProblem, null, status); + return false; + } + + return true; + } + + private void initializeOperation(ImportOperation op) { + op.setCreateContainerStructure(false); + op.setOverwriteResources(overwriteExistingResourcesCheckbox.getSelection()); + op.setCreateLinks(createLinksInWorkspaceButton.getSelection()); + op.setVirtualFolders(false); + } + +} diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/wizards/messages.properties b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/wizards/messages.properties index fb1e87131a..64841195cf 100644 --- a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/wizards/messages.properties +++ b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/wizards/messages.properties @@ -14,6 +14,26 @@ NewProjectWizard_DialogHeader = Tracing Project NewProjectWizard_DialogMessage = Create a Tracing Project +# ImportTraceWizard +ImportTraceWizard_DialogTitle=Trace Import +ImportTraceWizard_FileSystemTitle=File system +ImportTraceWizard_ImportTrace=Import a trace from the local file system +ImportTraceWizard_DirectoryLocation=Source directory: +ImportTraceWizard_BrowseButton=B&rowse... +ImportTraceWizard_TraceType=Trace Type: +ImportTraceWizard_SelectTraceDirectoryTitle=Select trace directory +ImportTraceWizard_SelectTraceDirectoryMessage=Select directory to import trace from +ImportTraceWizard_OverwriteExistingTrace=Overwrite existing trace without warning +ImportTraceWizard_CreateLinksInWorkspace=Create lin&ks in workspace +ImportTraceWizard_TraceValidationFailed=Validation failed +ImportTraceWizard_InvalidTraceDirectory=Invalid trace directory +ImportTraceWizard_SelectTraceSourceEmpty=Source must not be empty +ImportTraceWizard_SelectTraceNoneSelected=No trace selected +ImportTraceWizard_ImportProblem=Import problem +ImportTraceWizard_CannotImportFilesUnderAVirtualFolder=Can not import trace under a virtual folder +ImportTraceWizard_HaveToCreateLinksUnderAVirtualFolder=Have to create link under a virtual folder +ImportTraceWizard_Information=Information + # SelectTracesWizard SelectTracesWizard_WindowTitle=Select Traces SelectTracesWizardPage_TraceColumnHeader=Trace -- 2.34.1