From 537cd2b833a6cdf93bf4fa0b609aca5986a2d843 Mon Sep 17 00:00:00 2001 From: Marc-Andre Laperle Date: Mon, 29 Aug 2016 23:45:47 -0400 Subject: [PATCH] tmf: Make order of files processing more natural during import This changes the order of elements imported to be files first then the folders, then by lexical order. This makes it more predictable to the user when there can be name clashes. Bug: 500464 Change-Id: Iaf96c72a3fd9c9703ff9535f990a0092af75ff03 Signed-off-by: Marc-Andre Laperle Reviewed-on: https://git.eclipse.org/r/79986 Reviewed-by: Hudson CI Reviewed-by: Bernd Hufmann Tested-by: Bernd Hufmann --- .../importtrace/FileFileSystemObject.java | 5 +++++ ...leSystemObjectImportStructureProvider.java | 20 +++++++++++++++++++ .../importtrace/GzipFileSystemObject.java | 5 +++++ .../importtrace/IFileSystemObject.java | 7 +++++++ .../importtrace/TarFileSystemObject.java | 5 +++++ .../importtrace/ZipFileSystemObject.java | 5 +++++ 6 files changed, 47 insertions(+) diff --git a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/wizards/importtrace/FileFileSystemObject.java b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/wizards/importtrace/FileFileSystemObject.java index edf35a5763..f0c0da4448 100644 --- a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/wizards/importtrace/FileFileSystemObject.java +++ b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/wizards/importtrace/FileFileSystemObject.java @@ -85,4 +85,9 @@ class FileFileSystemObject implements IFileSystemObject { public Object getRawFileSystemObject() { return fFileSystemObject; } + + @Override + public boolean isDirectory() { + return fFileSystemObject.isDirectory(); + } } \ No newline at end of file diff --git a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/wizards/importtrace/FileSystemObjectImportStructureProvider.java b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/wizards/importtrace/FileSystemObjectImportStructureProvider.java index 140f7ce3bb..a14d75fb61 100644 --- a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/wizards/importtrace/FileSystemObjectImportStructureProvider.java +++ b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/wizards/importtrace/FileSystemObjectImportStructureProvider.java @@ -15,6 +15,7 @@ package org.eclipse.tracecompass.internal.tmf.ui.project.wizards.importtrace; import java.io.File; import java.io.InputStream; import java.util.ArrayList; +import java.util.Comparator; import java.util.List; import java.util.zip.ZipEntry; @@ -44,6 +45,23 @@ public class FileSystemObjectImportStructureProvider implements IImportStructure fArchivePath = archivePath; } + /** + * This orders by files first then the folders. Then by lexical order. + */ + private final class FileObjectPathComparator implements Comparator { + @Override + public int compare(IFileSystemObject o1, IFileSystemObject o2) { + if (o1.isDirectory() != o2.isDirectory()) { + if (o1.isDirectory()) { + return 1; + } + return -1; + } + + return o1.getName().compareToIgnoreCase(o2.getName()); + } + } + @Override public List getChildren(Object element) { @SuppressWarnings("rawtypes") @@ -52,6 +70,8 @@ public class FileSystemObjectImportStructureProvider implements IImportStructure for (Object o : children) { adapted.add(getIFileSystemObject(o)); } + + adapted.sort(new FileObjectPathComparator()); return adapted; } diff --git a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/wizards/importtrace/GzipFileSystemObject.java b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/wizards/importtrace/GzipFileSystemObject.java index 848d8003f3..1bc7676906 100644 --- a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/wizards/importtrace/GzipFileSystemObject.java +++ b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/wizards/importtrace/GzipFileSystemObject.java @@ -68,4 +68,9 @@ class GzipFileSystemObject implements IFileSystemObject { public Object getRawFileSystemObject() { return fFileSystemObject; } + + @Override + public boolean isDirectory() { + return fFileSystemObject.getFileType() == GzipEntry.DIRECTORY; + } } \ No newline at end of file diff --git a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/wizards/importtrace/IFileSystemObject.java b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/wizards/importtrace/IFileSystemObject.java index 0bf69441d1..c81c2909d8 100644 --- a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/wizards/importtrace/IFileSystemObject.java +++ b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/wizards/importtrace/IFileSystemObject.java @@ -54,4 +54,11 @@ public interface IFileSystemObject { * @return whether or not the file system object exists */ boolean exists(); + + /** + * Returns whether or not this object represents a directory. + * + * @return whether or not this object represents a directory. + */ + boolean isDirectory(); } \ No newline at end of file diff --git a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/wizards/importtrace/TarFileSystemObject.java b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/wizards/importtrace/TarFileSystemObject.java index 8865ac49bb..6717708a45 100644 --- a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/wizards/importtrace/TarFileSystemObject.java +++ b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/wizards/importtrace/TarFileSystemObject.java @@ -70,4 +70,9 @@ class TarFileSystemObject implements IFileSystemObject { public Object getRawFileSystemObject() { return fFileSystemObject; } + + @Override + public boolean isDirectory() { + return fFileSystemObject.getFileType() == TarEntry.DIRECTORY; + } } \ No newline at end of file diff --git a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/wizards/importtrace/ZipFileSystemObject.java b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/wizards/importtrace/ZipFileSystemObject.java index 12f8a08f38..d0204f8cda 100644 --- a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/wizards/importtrace/ZipFileSystemObject.java +++ b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/wizards/importtrace/ZipFileSystemObject.java @@ -68,4 +68,9 @@ class ZipFileSystemObject implements IFileSystemObject { public Object getRawFileSystemObject() { return fFileSystemObject; } + + @Override + public boolean isDirectory() { + return fFileSystemObject.isDirectory(); + } } \ No newline at end of file -- 2.34.1