tmf: Switch tmf.ui to Java 7 + fix warnings
[deliverable/tracecompass.git] / org.eclipse.linuxtools.tmf.ui / src / org / eclipse / linuxtools / internal / tmf / ui / project / wizards / tracepkg / importexport / TracePackageExportOperation.java
index c53b56dd50a8028cd5f763e6ee1dd7d8624d704c..89bf86c81fc69f16142548ca0f73482a03e11274 100644 (file)
@@ -16,7 +16,8 @@ import java.io.ByteArrayInputStream;
 import java.io.StringWriter;
 import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayList;
-import java.util.List;
+import java.util.HashSet;
+import java.util.Set;
 
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.transform.OutputKeys;
@@ -30,6 +31,7 @@ import org.eclipse.core.resources.IFolder;
 import org.eclipse.core.resources.IMarker;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
@@ -65,7 +67,7 @@ public class TracePackageExportOperation extends AbstractTracePackageOperation {
     private final TracePackageTraceElement[] fTraceExportElements;
     private final boolean fUseCompression;
     private final boolean fUseTar;
-    private final List<IResource> fResources;
+    private final Set<IResource> fResources;
     private IFolder fExportFolder;
 
     /**
@@ -85,7 +87,7 @@ public class TracePackageExportOperation extends AbstractTracePackageOperation {
         fTraceExportElements = traceExportElements;
         fUseCompression = useCompression;
         fUseTar = useTar;
-        fResources = new ArrayList<IResource>();
+        fResources = new HashSet<>();
     }
 
     /**
@@ -110,6 +112,10 @@ public class TracePackageExportOperation extends AbstractTracePackageOperation {
             Node tmfNode = doc.appendChild(createElement);
 
             for (TracePackageTraceElement tracePackageElement : fTraceExportElements) {
+                if (!isFilesChecked(tracePackageElement)) {
+                    continue;
+                }
+
                 exportTrace(progressMonitor, tmfNode, tracePackageElement);
             }
 
@@ -190,9 +196,13 @@ public class TracePackageExportOperation extends AbstractTracePackageOperation {
                 ModalContext.checkCanceled(monitor);
                 IResource res = supplFile.getResource();
                 res.refreshLocal(0, new SubProgressMonitor(monitor, 1, SubProgressMonitor.PREPEND_MAIN_LABEL_TO_SUBTASK));
-                createExportResource(traceSuppFilesFolder, res);
+                IResource link = createExportResource(traceSuppFilesFolder, res);
                 Element suppFileElement = doc.createElement(ITracePackageConstants.SUPPLEMENTARY_FILE_ELEMENT);
-                suppFileElement.setAttribute(ITracePackageConstants.SUPPLEMENTARY_FILE_NAME_ATTRIB, res.getName());
+
+                // project/.traceExport/.tracing/kernel/statistics.ht -> .tracing/kernel/statistics.ht
+                IPath archiveRelativePath = link.getFullPath().makeRelativeTo(fExportFolder.getFullPath());
+
+                suppFileElement.setAttribute(ITracePackageConstants.SUPPLEMENTARY_FILE_NAME_ATTRIB, archiveRelativePath.toString());
                 traceNode.appendChild(suppFileElement);
             }
 
@@ -208,9 +218,11 @@ public class TracePackageExportOperation extends AbstractTracePackageOperation {
             folder.create(IResource.FORCE, true, new SubProgressMonitor(monitor, 1, SubProgressMonitor.PREPEND_MAIN_LABEL_TO_SUBTASK));
         }
 
-        createExportResource(folder, resource);
+        IResource link = createExportResource(folder, resource);
         Element fileElement = doc.createElement(ITracePackageConstants.TRACE_FILE_ELEMENT);
-        fileElement.setAttribute(ITracePackageConstants.TRACE_FILE_NAME_ATTRIB, resource.getName());
+        // project/.traceExport/Traces/kernel -> Traces/kernel
+        IPath archiveRelativePath = link.getFullPath().makeRelativeTo(fExportFolder.getFullPath());
+        fileElement.setAttribute(ITracePackageConstants.TRACE_FILE_NAME_ATTRIB, archiveRelativePath.toString());
         traceNode.appendChild(fileElement);
         fResources.add(folder);
     }
@@ -221,16 +233,21 @@ public class TracePackageExportOperation extends AbstractTracePackageOperation {
      * @param exportFolder the folder that will contain the linked resource
      * @param res the resource to export
      * @throws CoreException when createLink fails
+     * @return the created linked resource
      */
-    private static void createExportResource(IFolder exportFolder, IResource res) throws CoreException {
+    private static IResource createExportResource(IFolder exportFolder, IResource res) throws CoreException {
+        IResource ret = null;
         // Note: The resources cannot be HIDDEN or else they are ignored by ArchiveFileExportOperation
         if (res instanceof IFolder) {
             IFolder folder = exportFolder.getFolder(res.getName());
             folder.createLink(res.getLocationURI(), IResource.NONE, null);
+            ret = folder;
         } else if (res instanceof IFile) {
             IFile file = exportFolder.getFile(res.getName());
             file.createLink(res.getLocationURI(), IResource.NONE, null);
+            ret = file;
         }
+        return ret;
     }
 
     private static void exportBookmarks(IProgressMonitor monitor, Node traceNode, TracePackageBookmarkElement element) throws CoreException, InterruptedException {
@@ -268,7 +285,7 @@ public class TracePackageExportOperation extends AbstractTracePackageOperation {
     }
 
     private IStatus exportToArchive(IProgressMonitor monitor, int totalWork) throws InvocationTargetException, InterruptedException {
-        ArchiveFileExportOperation op = new ArchiveFileExportOperation(fResources, getFileName());
+        ArchiveFileExportOperation op = new ArchiveFileExportOperation(new ArrayList<>(fResources), getFileName());
         op.setCreateLeadupStructure(false);
         op.setUseCompression(fUseCompression);
         op.setUseTarFormat(fUseTar);
This page took 0.027678 seconds and 5 git commands to generate.