tmf: Make order of files processing more natural during import
authorMarc-Andre Laperle <marc-andre.laperle@ericsson.com>
Tue, 30 Aug 2016 03:45:47 +0000 (23:45 -0400)
committerMarc-Andre Laperle <marc-andre.laperle@ericsson.com>
Tue, 30 Aug 2016 19:37:15 +0000 (15:37 -0400)
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 <marc-andre.laperle@ericsson.com>
Reviewed-on: https://git.eclipse.org/r/79986
Reviewed-by: Hudson CI
Reviewed-by: Bernd Hufmann <bernd.hufmann@ericsson.com>
Tested-by: Bernd Hufmann <bernd.hufmann@ericsson.com>
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/wizards/importtrace/FileFileSystemObject.java
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/wizards/importtrace/FileSystemObjectImportStructureProvider.java
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/wizards/importtrace/GzipFileSystemObject.java
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/wizards/importtrace/IFileSystemObject.java
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/wizards/importtrace/TarFileSystemObject.java
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/wizards/importtrace/ZipFileSystemObject.java

index edf35a57634d3a632ad07aee19fef70af93595a7..f0c0da4448b0294c0815e8858874098b7abb2ed8 100644 (file)
@@ -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
index 140f7ce3bb30ea0d2704b0b21cb0975bd23267d3..a14d75fb6137508a4207568b766d7825a3769590 100644 (file)
@@ -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<IFileSystemObject> {
+        @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<IFileSystemObject> 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;
     }
 
index 848d8003f37f6c7a28bb2396fe58f96c648c5890..1bc7676906e464338a626ccae432a7058eab7291 100644 (file)
@@ -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
index 0bf69441d1c4c9d8c6dd2d757c057962b4192ccd..c81c2909d81aea4af91f57c76169a64ecd37928c 100644 (file)
@@ -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
index 8865ac49bb4f84a7ea750ee4f9efeed78c4337c0..6717708a45560d4ca9f48d7730cffdc003714f2c 100644 (file)
@@ -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
index 12f8a08f38f6f853b4c3061ff555c369ad7ca6de..d0204f8cdafbaa87dec6ce6ef4d3d67c7cbd0d94 100644 (file)
@@ -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
This page took 0.027783 seconds and 5 git commands to generate.