02ddad60e96474dfcbafe86f7c8abd92d312b5dd
[deliverable/tracecompass.git] / tmf / org.eclipse.tracecompass.tmf.ui / src / org / eclipse / tracecompass / internal / tmf / ui / project / wizards / importtrace / FileSystemObjectImportStructureProvider.java
1 /*******************************************************************************
2 * Copyright (c) 2015 Ericsson
3 *
4 * All rights reserved. This program and the accompanying materials are
5 * made available under the terms of the Eclipse Public License v1.0 which
6 * accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
8 *
9 * Contributors:
10 * Marc-Andre Laperle - Initial API and implementation
11 *******************************************************************************/
12
13 package org.eclipse.tracecompass.internal.tmf.ui.project.wizards.importtrace;
14
15 import java.io.File;
16 import java.io.InputStream;
17 import java.util.ArrayList;
18 import java.util.Comparator;
19 import java.util.List;
20 import java.util.zip.ZipEntry;
21
22 import org.eclipse.ui.wizards.datatransfer.IImportStructureProvider;
23
24 /**
25 * An import provider that makes use of the IFileSystemObject abstraction
26 * instead of using plain file system objects (File, TarEntry, ZipEntry, etc)
27 */
28 public class FileSystemObjectImportStructureProvider implements IImportStructureProvider {
29
30 private IImportStructureProvider fImportProvider;
31 private String fArchivePath;
32
33 /**
34 * Constructor
35 *
36 * @param importStructureProvider
37 * the {@link IImportStructureProvider}
38 * @param archivePath
39 * the path of the archive file
40 */
41 public FileSystemObjectImportStructureProvider(IImportStructureProvider importStructureProvider, String archivePath) {
42 fImportProvider = importStructureProvider;
43 fArchivePath = archivePath;
44 }
45
46 /**
47 * This orders by files first then the folders. Then by lexical order.
48 */
49 private final class FileObjectPathComparator implements Comparator<IFileSystemObject> {
50 @Override
51 public int compare(IFileSystemObject o1, IFileSystemObject o2) {
52 if (o1.isDirectory() != o2.isDirectory()) {
53 if (o1.isDirectory()) {
54 return 1;
55 }
56 return -1;
57 }
58
59 return o1.getName().compareToIgnoreCase(o2.getName());
60 }
61 }
62
63 @Override
64 public List<IFileSystemObject> getChildren(Object element) {
65 @SuppressWarnings("rawtypes")
66 List children = fImportProvider.getChildren(((IFileSystemObject) element).getRawFileSystemObject());
67 List<IFileSystemObject> adapted = new ArrayList<>(children.size());
68 for (Object o : children) {
69 adapted.add(getIFileSystemObject(o));
70 }
71
72 adapted.sort(new FileObjectPathComparator());
73 return adapted;
74 }
75
76 /**
77 * Get the IFileSystemObject corresponding to the specified raw object
78 *
79 * @param o
80 * the raw object
81 * @return the corresponding IFileSystemObject
82 */
83 public IFileSystemObject getIFileSystemObject(Object o) {
84 if (o == null) {
85 return null;
86 }
87
88 if (o instanceof File) {
89 return new FileFileSystemObject((File) o);
90 } else if (o instanceof TarEntry) {
91 return new TarFileSystemObject((TarEntry) o, fArchivePath);
92 } else if (o instanceof ZipEntry) {
93 return new ZipFileSystemObject((ZipEntry) o, fArchivePath);
94 } else if (o instanceof GzipEntry) {
95 return new GzipFileSystemObject((GzipEntry) o, fArchivePath);
96 }
97
98 throw new IllegalArgumentException("Object type not handled"); //$NON-NLS-1$
99 }
100
101 @Override
102 public InputStream getContents(Object fileSystemObject) {
103 return fImportProvider.getContents(((IFileSystemObject) fileSystemObject).getRawFileSystemObject());
104 }
105
106 @Override
107 public String getFullPath(Object element) {
108 return fImportProvider.getFullPath(((IFileSystemObject) element).getRawFileSystemObject());
109 }
110
111 @Override
112 public String getLabel(Object element) {
113 return fImportProvider.getLabel(((IFileSystemObject) element).getRawFileSystemObject());
114 }
115
116 @Override
117 public boolean isFolder(Object element) {
118 return fImportProvider.isFolder(((IFileSystemObject) element).getRawFileSystemObject());
119 }
120
121 /**
122 * Disposes of the resources associated with the provider.
123 */
124 public void dispose() {
125 }
126 }
This page took 0.033079 seconds and 4 git commands to generate.