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;
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;
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;
/**
fTraceExportElements = traceExportElements;
fUseCompression = useCompression;
fUseTar = useTar;
- fResources = new ArrayList<IResource>();
+ fResources = new HashSet<>();
}
/**
Node tmfNode = doc.appendChild(createElement);
for (TracePackageTraceElement tracePackageElement : fTraceExportElements) {
+ if (!isFilesChecked(tracePackageElement)) {
+ continue;
+ }
+
exportTrace(progressMonitor, tmfNode, tracePackageElement);
}
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);
}
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);
}
* @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 {
}
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);